在嵌套数组中查找 objects,mongodb,罗盘

Find objects in nested array, mongodb, compass

我正在使用 Mongodb 数据库和 Compass 工具来可视化我的数据。 我的 collection 叫 'ProbCancer' 看起来像这样:

probCancers: [
        cases: [
                {
                   case: {
                   bi: Number,
                   age: Number,
                 },
                   level: Number,
                   _id: false,
                }
              ]
            ]

由于我在cases数组中有很多objects,所以很难分析它们。我只想找到级别 = -1 的 objects。有没有办法在指南针中进行此查询?在 db.probCancers.find(query); 中提供 query 参数对我也有帮助。

试试怎么样:

db.ProbCancer.find( { "cases.level" : -1 } )

或者您可以使用 $all 您可以在 mongodb 的官方文档中找到更多信息:Link to documentation

我在 mongoDB shell 中从这个 link: Mongodb, search object in nested Array 找到了如何做到这一点,但我不知道为什么它在指南针中不起作用版本 1.11.2.

通过像这样定义 query 参数有一个解决方案:{cases: {$elemMatch: { level: -1}}},为了防止获取完整的 cases 数组,我们应该指定 projection 字段。它与 query 字段相同。但是这个解决方案 returns cases 数组中与 level = -1.

匹配的第一个对象

所以,这是结果:

db.probCancer.find({cases: {$elemMatch: { level: -1}}}, 
                   {cases: {$elemMatch: { level: -1}}}
                  );

在mongoDB中,要在嵌套数组中进行查询,数组必须展平。然后查询将在结果平面数组中完成。为此,我们需要使用管道聚合,请参阅 the link

这段代码会给我们想要的结果:

db.probCancer.aggregate([ { $unwind : "$cases" }, { $match : {"cases.level":-1}} ]);

很遗憾 $elemMatch projections are not supported in Compass. There is an open tracker 这个问题。 (我没有足够的声誉来评论 Bentaiba 的回答。)

编辑1:
上述问题已于 2019 年 9 月 27 日关闭(修复)。