如何在mongodb中按嵌入值分组,并使用total count为其设置名称

如何在mongodb中按嵌入值分组,并使用total count为其设置名称,mongodb,mongodb-query,nosql-aggregation,Mongodb,Mongodb Query,Nosql Aggregation,我的收藏: 样本集合Json结构: { "_id" : ObjectId("5f30df2ca032ecb2d14568bf"), "value" : { "busId" : 100.0, "status" : { "code" : { "id"

我的收藏:

样本集合Json结构:

{ 
    "_id" : ObjectId("5f30df2ca032ecb2d14568bf"), 
    "value" : {
        "busId" : 100.0, 
        "status" : {
            "code" : {
                "id" : 1.0, 
                "key" : "2100", 
                "value" : "Complete"
            }
        }
    }
}
目标是获取单个业务ID的批准和拒绝状态计数

db.suraj_coll.aggregate([
    {"$group" : {_id:{busId:"$value.busId",status:"$value.status.code.value"}, count:{$sum:1}}}
])
上面的查询返回输出 (样本输出):

但我想提出一个条件,即每当它在(Complete,Accept)中找到$in值时,它就会将该值更改为Approved,并使计数为3。 我认为可以使用$cond(聚合)来完成,但是发现很难更改名称,更具体地说,我希望输出为:

 { 
        "_id" : {
            "busId" : 200.0, 
            "status" : "Rejected"
        }, 
        "count" : 2.0
    }
    { 
        "_id" : {
            "busId" : 100.0, 
            "status" : "Approved"
        }, 
        "count" : 3
    }
    
因此,基本上每当它发现Accept/Complete时,它都会增加值/计数总和,并根据批准的名称进行存储。对于“取消”,将值更改为“已拒绝”


任何建议/解决方案都会有帮助。

太好了。您需要做的是,在分组之前,只需添加另一个字段以确定其是否已批准,这将使您更加轻松

{
    $addFields: {
      "value.available": {
        $cond: [
          {
            $in: [
              "$value.status.code.value",
              [
                "Accept",
                "Complete"
              ]
            ]
          },
          "Approved",
          "Rejected"
        ]
      }
    }
  }

工作

Wow。。这是无缝的。谢谢Valman,所以基本上你已经在分组之前添加了一个新的字段。我说得对吗。。是否有可能进一步压缩文档,例如{“_id”:{“test”:200.0,“Approved”:{“count”:2}“Rejected”:{“count”:1}}}给我一些时间。我不在家。@varman.尝试了$merge,但破坏了东西。。我确实需要改进我在mongo上的基础知识..:你很受欢迎。如果你有疑问,请告诉我,我会尽力的。顺便说一下,试着回答这个问题。这将有助于提高知识水平
{
    $addFields: {
      "value.available": {
        $cond: [
          {
            $in: [
              "$value.status.code.value",
              [
                "Accept",
                "Complete"
              ]
            ]
          },
          "Approved",
          "Rejected"
        ]
      }
    }
  }