#python #mongodb #pymongo
#python #mongodb #pymongo
Вопрос:
У меня есть вложенный словарь, который я вставил в свою коллекцию
data={'name': {'animal': {'lion': 2, 'tiger': 1}}}
data1={'name': {'plant': {'herb': 2, 'tree': 1}}}
collection.insert_one(data)
collection.insert_one(data1)
collection.find({})
Он выдает мне результат как.
[{'_id': ObjectId('5fabab4c959bc806cd129d6a'),
'name': {'plant': {'herb': 2, 'tree': 1}}},
{'_id': ObjectId('5fabb0a2959bc806cd129d6b'),
'name': {'animal': {'lion': 2, 'tiger': 1}}}]
У меня есть два списка, один из которых — имя, а другой — токен.
name=["animal","ocean"]
token=["fish","desert","lion"]
Теперь мой запрос заключается в том, что сначала я проверю, присутствует ли имя в нашей коллекции или нет, если имя отсутствует, мы просто вставляем словарь в коллекцию следующим образом. (ocean отсутствует в коллекции)
data={'name': {'ocean': {'fish': 1, 'desert': 1,"lion":1}}}
collection.insert_one(data)
если имя присутствует в нашей коллекции, то мы проверим, сколько токенов присутствует, если токен присутствует, мы увеличим его количество, иначе это будет так для animal, которое мы вставим.
data={'name': {'animal': {'fish': 1, 'desert': 1,"lion":2}}}
Мое решение заключается в том, что сначала проверьте, присутствует ли имя в коллекции или нет, если оно присутствует, а затем просто извлеките его и обновите, выполнив итерацию по словарю.
Я попытался проверить, присутствует ли имя или нет.
list(collection.find({"name.1":"animal"}))
Но это дает мне пустой список. Каков правильный способ решения запроса?
Ответ №1:
Если вы хотите проверить, существует ли ключ в объекте, используйте $exists
оператор:
list(collection.find({"name.animal": {"$exists": True}}))