Я пытаюсь запросить коллекцию базы данных, которая содержит документы процессов для тех документов, которые имеют определенные поля. Для простоты представьте следующую общую схему документа:Проверить наличие нескольких полей в документе MongoDB
{
"timestamp": ISODate("..."),
"result1": "pass",
"result2": "fail"
}
Теперь, когда процесс запущен новый документ вставляется только с отметкой времени. Когда этот процесс достигает определенных этапов, поля result1
и result2
добавляются с течением времени. Однако некоторые процессы не доходят до этапов 1
или 2
и поэтому не имеют полей результатов.
Я хотел бы запросить базу данных, чтобы получить только те документы, которые имеют ОБА result1
и result2
.
Я знаю об операторе $exists, но насколько я могу сказать, это работает только для одного поля за раз, то есть db.coll.find({"result1": {$exists: true}})
. Оператор $exists
не может использоваться как оператор верхнего уровня. Например. это делает не работы:
db.coll.find({"$exists": {"result1": true, "result2": true}})
Для проверки обоих результатов я должен был бы:
db.coll.find({"result1": {"$exists": true}, "result2": {"$exists": true}})
Теперь, когда уже становится утомительным для более одна переменная.
Есть ли лучший способ сделать это? (Кроме того, я делаю это в Python, так что если есть решение для всего водителя PyMongo, что сделало бы меня счастливым уже.)
См http://stackoverflow.com/questions/43898220/pymongo-aggregate-filter-by-count-of-fields-number-dynamic для агрегации (стороне сервера) решение. –