如何在 Pymongo 中使用两个不同的密钥访问文档?

How to accessing a document with two different keys in Pymongo?

collection = database.collection
collection.insert_one({"_id": friendship_code, "test@gmail.com": "user_name", "second@gmail.com": "second_user_name"}).inserted_id

我想做类似的事情 this.Then 我会通过两种方式到达此文档。

collection.find_one({"test@gmail.com": "user_name"})

collection.find_one({"second@gmail.com": "second_user_name"})

但在键名“.”中不可能。 bson.errors.InvalidDocument: 键 'test@test.com' 不能包含 '.'

我不会写这样的代码。

collection = database.collection
collection.insert_one({"_id": friendship_code, "user1": "test@gmail.com", "user2": "second@gmail.com"}).inserted_id

因为有时邮件会改变位置。当一个邮件与另一个邮件一起保存时,可以是user1或user2。

collection = database.collection
collection.insert_one({"_id": friendship_code, "user1": "second@gmail.com", "User2": "another@gmail.com"}).inserted_id

我可以通过 python 中的 if 博客检查这个,但这不是一个好方法。

if collection.find_one ({"user1": "second@gmail.com"}) or collection.find_one({"user2": "second@gmail.com"}):

我想从集合中检索所有“second@gmail.com”数据,即使我不知道它是 user2 还是 user1。

与其存储 user1、user2 等,不如将它们存储为用户数组,这样您的查询就更简单了:

collection.insert_one({"_id": friendship_code, "users": ["test@gmail.com", "second@gmail.com"]}).inserted_id

那么这些查询中的任何一个都会return相关记录:

print(collection.find_one({"users": "test@gmail.com"}))
print(collection.find_one({"users": "second@gmail.com"}))