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 在组中的相等条件无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在组中的所有单元格中放置小计值

Mongodb Lookup 无法正常工作

根据元素在组中的位置设置元素样式

在组中的第一个 btn 上引导 CSS 边框半径

mongoose 中的 UpdateMany 无法正常工作,但直接在 mongodb 中可以正常工作

Spring数据MongoDB无法在组聚合中映射_id