在嵌套数组中查找 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 日关闭(修复)。
我正在使用 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 日关闭(修复)。