mongodb 在组中的相等条件无法正常工作
Posted
技术标签:
【中文标题】mongodb 在组中的相等条件无法正常工作【英文标题】:equal condition is not working properly in groupby mongodb 【发布时间】:2015-10-18 19:07:39 【问题描述】:相等条件 ($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。
请让我知道我在查询中做错了什么
【问题讨论】:
您的文档中没有“总计”字段。您实际上打算添加哪个字段?为什么错误条件会是 1? 嗨 @BlakesSeven 它不等于 $sum 抱歉 我正在讨论 Prestobar 印象的$sum
条件“内部”的字段。它确实存在于您的示例文档中。 “cid”也没有,它也没有理由处于单独的$match
阶段。在这里您可能会尝试对不存在的字段进行总计。因此0
.
那么问题出在哪里?您的意思是对您未列出的另一个字段进行总计,还是完全是其他意思?在您的文档中似乎没有的两个地方命名字段使这有点神秘。您是否需要为您的问题添加更多信息或情况如何?
【参考方案1】:
$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
【讨论】:
以上是关于mongodb 在组中的相等条件无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章