[英]How to query in mongodb with nested json
我有这个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"})
但这没有用。 我想念什么?
您可以将$expr
与$size
一起使用以过滤文档
db.col.find({$expr : {$gt : [{$size : "$MYtable"},1]}})
尝试使用下面文档中的 $expr
$ expr比$ where快,因为它不执行JavaScript,因此应尽可能首选。
编辑-1
您可能需要更改文档结构以存储数组元素
下面通过将0处的数组元素转换为数组以比较大小来与您的文档结构配合使用
db.col.find({$expr:{$gt:[{$size:{$ifNull:[{"$objectToArray":{$arrayElemAt:[{$ifNull:["$MYtable",[]]},0]}},[]]}},1]}})
有一个恕我直言的hacky,但经常被看到:
db.collection.find({'yourArrayField.1' : {$exists : true}}
我不确定当前是否存在现有字段之间的未定义字段,但这是一个简单的解决方案,可能对您有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.