首页 > 解决方案 > 如何使用嵌套 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"})

但它没有用。我错过了什么?

标签: pythonjsonmongodb

解决方案


您可以使用$exprwith$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]}})

推荐阅读