【发布时间】:2015-11-16 09:44:16
【问题描述】:
这是我的 MongoDB 集合架构:
company: String
model: String
cons: [String] // array of tags that were marked as "cons"
pros: [String] // array of tags that were marked as "pros"
这是我的query:
[
{ "$project": {
"company": 1,
"model": 1,
"data": {
"$setUnion": [
{ "$map": {
"input": "$pros",
"as": "pro",
"in": {
"type": "$pro",
"value": "$$pro"
}
}},
{ "$map": {
"input": "$cons",
"as": "con",
"in": {
"type": "$con",
"value": "$$con"
}
}}
]
}
}},
{ "$unwind": "$data" },
{ "$group": {
"_id": {
"company": "$company",
"model": "$model",
"theTag": "$data.value"
},
"sumPros": {
"$sum": {
"$cond": [
{ "$eq": [ "$data.type", "$pro" ] },
1,
0
]
}
},
"sumCons": {
"$sum": {
"$cond": [
{ "$eq": [ "$data.type", "$con" ] },
1,
0
]
}
}
}},
{ "$group": {
"_id": {
"company": "$_id.company",
"model": "$_id.model",
},
"tags": {$push: {
"tag": "$_id.theTag",
"pros": "$sumPros",
"cons": "$sumCons"
}
}}
}]
这是输出:
{
"_id": {
"company": "Lenovo",
"model": "T400"
},
"tags": [
{
"tag": "Quality",
"pros": 64, // expected value is 54
"cons": 64 // expected value is 10
},
{
"tag": "Value",
"pros": 76, // expected value is 30
"cons": 76 // expected value is 46
}
]
}
...
注意pros 和cons 的值是相同的。出于某种原因,它们代表pros 和cons 的总和,我不知道为什么。
我做错了什么?
更新:
这里是集合中的一个文档:
{
"company": "Lenovo",
"model": "X200",
"cons": [
"Quality"
],
"pros": [
"Value",
"Styling"
]
}
【问题讨论】:
-
不应该。你能用一个数据样本来扩展这个问题吗?
-
@BlakesSeven 什么数据样本?
-
嗯,基本上人们可以剪切和粘贴并使用它来确认您的结果。我会很高兴地在这里添加“您的查询”实际上是从这里的早期问题中收集的“我的逻辑”。但是可以这么说,我一直在“蒙着眼睛”工作,因为您的问题都没有提供实际数据可供使用。逻辑应该是合理的,但请展示一些我们都可以尝试使用的基本集合数据。
-
@BlakesSeven 这是评论的集合,这意味着有很多文档具有相同的
model名称
标签: javascript mongodb mongoose mongodb-query aggregation-framework