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

时间:2018-12-27 17:58:16

标签: python json mongodb

我有这个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"})

但是没有用。我想念什么?

2 个答案:

答案 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}}

我不确定当前的字段之间是否存在未定义的字段,但这是一个简单的解决方案,可能对您有用。