相等条件($ eq)在mongo db中无法正常工作。下面是我的mongo db文档(表)。
{
"_id":ObjectId("55b08b169d735e293624504a"),
"a":[
{
"acid":139,
"akey":"love",
"atp":"abcd",
"aadd":" ",
"adur":3073
}
],
"created": ISODate("2015-07-23T06:35:02.959 Z")
}
我的查询
[
{
"$match":{
"created":{
"$gte": ISODate("2015-01-19T07:26:49.045 Z"),
"$lte": ISODate("2015-08-20T07:37:56.045 Z")
}
}
},
{
"$match":{
"cid":{
$nin:[
"59290C6FCCB7E82BD3861F9B6EB46930_2017dec8-0c2c-40c5-9c33-4e3ced0d692f",
"F098F7DBEFCBAE3ED0E815DE694F2307_8fbe1abc-0d11-443d-bd0a-bf5f181673de",
"9BAE0D8CA2A3B4BB641C8CCA2A0BD935_d7a76cf4-eb42-41f8-a851-06dd25269fbf"
]
}
}
},
{
"$unwind":"$a"
},
{
$group:{
_id:"$a.acid",
"PrestoBarImpression":{
"$sum":{
"$cond":[
{
"$eq":[
"$a.atp",
"abcd"
]
},
"$total",
1
]
}
},
"entries":{
$sum:1
}
}
}
我得到以下输出。
{
"result":[
{
"_id":139,
"PrestoBarImpression":0,
"entries":1.0000000000000000
}
],
"ok":1.0000000000000000
}
如果我把ne而不是eq我得到了所需的输出,因为展示次数为1且条目为1。
请让我知道我在查询中犯了什么错误
答案 0 :(得分:2)
$eq
运算符通过比较两个值来工作,当值相等时返回true,当值不相等时返回false。因此,在 $cond
运算符中,当 $eq
运算符表达式的计算结果为true时, $cond
应该返回值1,如果 $eq
表达式的计算结果为false,则它应返回0,以便累加器运算符 $sum
为您提供实际值总
因此,您的 $group
管道阶段应如下所示:
{
$group: {
_id: "$a.acid",
"PrestoBarImpression": {
"$sum": {
"$cond": [
{
"$eq": [ "$a.atp", "abcd" ]
},
1,
0
]
}
},
"entries": { $sum: 1 }
}
}