【发布时间】:2015-08-27 22:10:31
【问题描述】:
在 MongoDB 中,我只需要从文档中推送与对象属性匹配的对象数组。使用聚合我可以做到这一点。
但是我对匹配有问题。
Users
.aggregate()
.match({_id: userId})
.unwind('tags')
.match({"tags.name": "verified"})
.group({
"_id": {"id": "$_id", "type": "$type"},
"tags": {$push: "$tags"}
})
当用户有“已验证”标签时,这可以正常工作。但是当用户没有那个结果时,只是[](空数组)。
我知道这是已知的行为,但我如何才能获得匹配的用户(因为如果有效用户将返回第一个匹配项),而 tags 单独作为空数组。
样本收集:
{
_id: 123,
type: "normal",
tags: [{name: "verified", "tagId": 1}, {name: "good", "tagId": 2}]
}
{
_id: 122,
type: "normal",
tags: [{name: "good", "tagId": 2}]
}
所以当我对 userId = 123 应用上述聚合时,结果是,
{
result: [
{
"_id": {
"id": 123,
"type": "normal"
}
"tags": [{name: "verified", "tagId": 1}]
}
],
"ok": 1
}
同样,如果我申请 userId = 122,结果是[]
但预期的结果是,
{
result: [
{
"_id": {
"id": 122,
"type": "normal"
}
"tags": []
}
],
"ok": 1
}
【问题讨论】:
-
你能发一份样本文件吗?
-
目前的结果也会有所帮助
-
@ZeMoon 添加了样本收集和预期结果
标签: mongodb mongoose mongodb-query aggregation-framework