【发布时间】:2015-06-30 11:23:43
【问题描述】:
我正在尝试查询一个数据库集合,该集合包含具有特定字段的那些文档的进程文档。为简单起见,想象以下一般文档架构:
{
"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 驱动程序的解决方案,我已经很高兴了。)
【问题讨论】:
-
查看stackoverflow.com/questions/43898220/… 了解聚合(服务器端)解决方案。