【发布时间】:2016-09-12 07:00:26
【问题描述】:
目前,无法在 $filter 数组聚合运算符中使用 $in 运算符。
假设这是文档架构:
{
_id: 1,
users: [
{
_id: 'a',
accounts: ['x', 'y', 'z']
},
{
_id: 'b',
accounts: ['j','k','l']
}
]
}
我想使用aggregate,根据accounts 数组的内容获取过滤数组users 的文档。
IF $in 可以与 $filter 运算符一起使用,我希望它看起来像这样:
db.test.aggregate([
{
$project: {
'filtered_users': {
$filter: {
input: '$users',
as: 'user',
cond: {
$in: ['$$user.accounts', ['x']]
}
}
}
}
}
])
并返回filtered_users,只有自x以来的第一个用户在他的帐户。
但是,正如我所说,这不起作用,我得到了错误:
“无效的运算符'$in'”
因为 $filter 运算符不支持它。
现在我知道我可以使用 $unwind 并使用常规的 $match 运算符来做到这一点,但之后聚合时间会更长(而且更丑陋),因为需要使用 $group 将结果设置为数组- 我不想要这个
我的问题是,是否有其他方法可以操纵 $filter 运算符以获得我想要的结果。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework