#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"}))