【发布时间】:2019-09-29 22:16:19
【问题描述】:
我的数据如下所示:
{
"_id" : 1,
"data" : [
{
"id" : 1,
"one" : [
{"user" : 2, "two" : 2},
{"user" : 1, "two" : 3}
]
}
]
}
{
"_id" : 2,
"data" : [
{
"id" : 2,
"one" : [
{"user" : 2, "two" : 2},
{"user" : 1, "two" : 3}
]
}
]
}
我想在一个聚合中进行过滤(因为上面的数据来自之前的阶段),以便过滤一个数组以仅显示用户等于 _id 的一个数组项。
以下返回一个空数组,如何让过滤器按我的预期填充一个数组?
db.parks.aggregate([{$project: {_id: 1, 'data.id': 1, 'data.one':
{$filter: {
input: '$data.one',
as: 'un',
cond: {$eq: ['$$un.user', '$_id']}}
}}}]).pretty()
这给出了:
{ "_id" : 1, "data" : [ { "id" : 1, "one" : [ ] } ] }
{ "_id" : 2, "data" : [ { "id" : 2, "one" : [ ] } ] }
将“$_id”替换为“$$un.user”会按预期显示所有 data.one 项,因此看起来问题出在 $eq 语句中。
如何让过滤器按预期显示一个数组?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework