我有这个json文件:
{
"id" : 100,
"boolean": 1,
"color": 2,
"MYtable": [{"a":1, "b":2}],
"number": 4,
"string": 5
}
{
"id" : 200,
"boolean": 1,
"color": 22,
"MYtable": [{"a":10, "b":20,"c":30}],
"number": 42,
"string": 52
}
{
"id" : 300,
"boolean": 13,
"color": 223,
"MYtable": [],
"number": 423,
"string": 523
}
使用mongodb查询,我只想获取MYtable大小为1或更大的元素。例如,在上面的json中,我只会获取ID为100和200的元素。
MYcollection是我的数据库的集合。
我尝试过:
MYcollection.find({ "MYtable": {"$size": {"$gt" :1}}})
还有这个:
MYcollection.find({"$where" : "this.MYtable.length > 1"})
但是没有用。我想念什么?
答案 0 :(得分:2)
您可以将$expr
与$size
一起使用来过滤文档
db.col.find({$expr : {$gt : [{$size : "$MYtable"},1]}})
尝试使用documentation下方的$expr
$ expr比$ where快,因为它不执行JavaScript,并且 在可能的情况下应该是首选。
编辑-1
您可能需要更改文档结构以存储数组元素
以下通过将0处的数组元素转换为数组以比较大小来与您的文档结构配合使用
db.col.find({$expr:{$gt:[{$size:{$ifNull:[{"$objectToArray":{$arrayElemAt:[{$ifNull:["$MYtable",[]]},0]}},[]]}},1]}})
答案 1 :(得分:0)
有一个恕我直言的骇客,但经常看到:
db.collection.find({'yourArrayField.1' : {$exists : true}}
我不确定当前的字段之间是否存在未定义的字段,但这是一个简单的解决方案,可能对您有用。