【发布时间】:2016-09-30 20:59:59
【问题描述】:
基于this问题...
我正在尝试创建一个聚合函数并根据子数组中的值过滤我的数组。目前我的数组结构如下:
'id':1,
'data': {
'value':1
}
'id':2,
'data': {
'value':1
}
'id':3,
'data': {
'value':2
}
所以我需要获取 data.value 为 1 的所有项目。目前为了做到这一点,我必须执行以下操作:
db.ids.aggregate([
{$match:{id:{$exists:true}}}, //some more matching conditions here...
{$unwind:'$data'},
{$match:{'data.value':1}}//need to get rid of this and move it to the first $match
所以问题是我可以摆脱第二个 $match 并将我的子数组过滤条件放入第一个匹配项中吗?我试图这样做,但它不起作用并返回了整个文档。我真的需要根据子数组值过滤我的数组,因为我的数据库会变得非常大,我不希望在整堆文档上使用 $unwind。 谢谢。
【问题讨论】:
-
您能否添加一个完整文档的示例,因为目前尚不清楚(至少对我而言)您的文档是什么样子 - 我目前不确定您显示的数据是否应该代表 3 个文档或一个包含这 3 个子文档的嵌套数组的文档。