Как мне найти документы, основанные на том, существует ли поле и другое, которого нет в MongoDB? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть пачка документов, состоящая из полей «Данные» и «Текст».В некоторых документах есть один, а в других нет ни одного.Как бы я запросил через pyMongo, чтобы получить документы, которые имеют поле «Данные» и не имеют поле «Текст»?

Я пробовал следующие запросы, но mongo не возвращает никаких файлов.

МЕТОД 1:

files = collection.find({"Data": {"$exists": "true"}, {"Text": {"$exists": "false"}})

for file in files:
    print(file)

МЕТОД 2:

files = collection.find({"$and": [{"Data": {"$exists": "true"}}, {"Text": {"$exists": "false"}}]})

for file in files:
    print(file)

ПРИМЕЧАНИЕ: яв настоящее время выполняется запрос к базе данных, где нет коллекций с полем «Текст» (пока), но запрос все равно должен работать с логикой.Это:

Возврат документов с «данными» и без «текста»

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Вы можете сослаться по этой ссылке: https://docs.mongodb.com/manual/tutorial/query-for-null-fields/

Попробуйте этот

  collection.find({"Data": {"$exists": "true"}, {"Text": null })

запрос сопоставить документы, которые либо содержат текстовое поле со значением NULL, либо не содержат текстовое поле.

Если вам не удалось решить эту проблему, то, пожалуйста, опубликуйте свое хранилище данных в коллекциях для справки и структуру вашей схемы. Это поможет нам, если у вас возникнут проблемы с ним.

0 голосов
/ 27 декабря 2018

Я попытался использовать Нет вместо False, как указала Анушка, и это сработало.

files = coll.find({"Data": {"$exists": "true"}, "Text": None})

Если кто-то знает, почему моя первоначальная попытка, как указано ниже, не сработала, просьба прокомментироватьэтот ответБлагодарю.

files = collection.find({"Data": {"$exists": "true"}, {"Text": {"$exists": "false"}})
0 голосов
/ 27 декабря 2018

при использовании $ существует: true любой тип использования индекса выходит за рамки уравнения.Вы можете изменить запрос как files = collection.find ({"Data": {$ ne: null}, Text: null})

...