Как получить доступ к документу с двумя разными ключами в Pymongo?

#mongodb #flask #pymongo

#mongodb #flask #pymongo

Вопрос:

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

Я хотел сделать что-то вроде этого.Тогда я бы добрался до этого документа двумя способами.

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

или

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

Но в имени ключа «.» не может быть.
bson.ошибки.InvalidDocument: ключ ‘test@test.com ‘не должно содержать ‘.’

Я не могу написать такой код.

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

Потому что иногда письма меняются местами. Когда почта сохраняется с другой почтой, это может быть пользователь1 или пользователь2.

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

Я могу проверить это в блоге if на python, но это не очень хороший подход.

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

Я хочу получить все «second@gmail.com » данные из коллекции, хотя я не знаю, является ли это пользователем 2 или пользователем 1.

Комментарии:

1. Вы пробовали использовать оператор $ or , чтобы проверить их оба?

Ответ №1:

Вместо хранения user1, user2 и т.д. Храните их как массив users, тогда ваш запрос будет проще:

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

Тогда любой из этих запросов вернет соответствующую запись:

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