繁体   English   中英

如何使用嵌套的json在mongodb中查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM