在嵌套数组,mongodb,指南针中查找对象

时间:2018-02-21 20:47:48

标签: mongodb compass

我使用Mongodb数据库和Compass工具来可视化我的数据。 我的收藏名为' ProbCancer'看起来像那样:

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

由于我在cases数组中有很多对象,因此很难对它们进行分析。我想只找到level = -1的对象。有没有办法在罗盘中进行此查询?在query中提供db.probCancers.find(query);参数也可能对我有所帮助。

3 个答案:

答案 0 :(得分:6)

不幸的是,指南针不支持$elemMatch投影。该问题有一个开放的tracker。 (我没有足够的声誉来评论Bentaiba的答案。)

答案 1 :(得分:3)

我通过以下链接找到了如何在mongoDB shell中执行此操作:Mongodb, search object in nested Array,但我不知道为什么它在罗盘版本1.11.2中不起作用。

有一个解决方案是定义query参数,例如{cases: {$elemMatch: { level: -1}}},并且为了防止获取完整的cases数组,我们应该指定projection字段。它与query字段相同。但是此解决方案返回cases数组中与level = -1匹配的第一个对象。

所以,这就是结果:

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

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

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

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

答案 2 :(得分:0)

尝试怎么样:

Intent intent = new Intent("action1");
sendBroadcast(intent);

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