我有一个像这样的文档结构
{
"_id" : "3:/content/somepath/test.txt",
"_revisions" : {
"r152f47f1daf-0-2" : "c",
"r152f48413c1-0-2" : "c",
"r152f4851bf7-0-1" : "c"
}
}
我的任务是查找具有以下条件的所有文件:
第一部分很简单,我用
解决了这个问题db.nodes.find( {'_id': /^5:/} )
但我正在努力解决第二部分问题,我应该使用$gt
。
由于我是MongoDB的新手,我第一次看$size
,但_revisions
不是数组,它是一个子文档,对吗?
还在查看$unwind
然后计算结果,但这也没有意义,因为我的结果需要是符合上述两个条件的文档。
任何指针都非常赞赏。
答案 0 :(得分:1)
使用$where
运算符。
db.nodes.find(function() {
return (/^5:/.test(this._id) && Object.keys(this._revisions).length > 3 );
})
documentation中提到的问题是:
$where
评估JavaScript并且无法利用索引。因此,当您使用标准MongoDB运算符表达查询时,查询性能会提高(例如$gt
,$in
)。
您一定要考虑将_revisions
字段更改为这样的子文档数组:
{
"_id" : "3:/content/somepath/test.txt",
"_revisions" : [
{
"rev": "r152f47f1daf-0-2",
"value": "c"
},
{
"rev": "r152f48413c1-0-2",
"value": "c"
},
{
"rev": "r152f4851bf7-0-1",
"value": "c"
}
]
}
并使用$exists
运算符。
db.nodes.find({ "_id": /^5:/, "_revisions.3": { "$exists": true } } )