簡體   English   中英

MongoDB 中的分組和計數操作

[英]Grouping and counting Operations in MongoDB

我有兩個集合,如下所示

票務大師

{
    "_id" : ObjectId("5e70ed53de0f7507d4da8dc2"),
    "TICKET_NO" : 1000,
    "DESCRIPTION" : "<p>dsdsd</p>",
    "ASSIGNED_TO" : ObjectId("5e78f2b2c0e09128e81db475"),
    "RESOLVED_BY" : ObjectId("5e6f1c5b8451307f782d0992")
}

/* 2 */
{
    "_id" : ObjectId("5e70f19c47df9479502f7933"),
    "TICKET_NO" : 1001,
    "DESCRIPTION" : "<p>vcvcv</p>",
    "ASSIGNED_TO" : ObjectId("5e706e914587054254c02085"),
    "RESOLVED_BY" : ObjectId("5e6f1c5b8451307f782d0992")
}

/* 3 */
{
    "_id" : ObjectId("5e70f4fa47df9479502f7937"),
    "TICKET_NO" : 1002,
    "DESCRIPTION" : "<p>xcxc</p>",
    "ASSIGNED_TO" : ObjectId("5e706e914587054254c02085"),
    "RESOLVED_BY" : ObjectId("5e706e914587054254c02085")
}

Agent_master

{
    "_id" : ObjectId("5e6f1c5b8451307f782d0992"),
    "NAME" : "A1",
}

/* 2 */
{
    "_id" : ObjectId("5e706e914587054254c02085"),
    "NAME" : "A2",
}

/* 3 */
{
    "_id" : ObjectId("5e78f2b2c0e09128e81db475"),
    "NAME" : "A3",
}

我需要執行各種數據庫操作,如分組和計數以獲得預期結果,如下所述

預期輸出:

[
    {
         NAME : 'A1',
         COUNT:2,
    },
    {
        NAME : 'A2',
        COUNT:1,
    },
    {
        NAME : 'A3',
        COUNT:0,
    }

]

我想用代理的名字找到每個代理解決的工單數量。 RESOLVED_BY是指解決工單的代理 ID。

我希望你明白我的意思! 謝謝

嘗試使用以下查詢:

db.getCollection('ticket_masters').aggregate([
    {"$group" : {_id:"$RESOLVED_BY", count:{$sum:1}}}
    ])

實際輸出:

/* 1 */
{
    "_id" : ObjectId("5e78f2ddc0e09128e81db47a"),
    "count" : 1.0
}

/* 2 */
{
    "_id" : ObjectId("5e6f1c5b8451307f782d0992"),
    "count" : 4.0
}

/* 3 */
{
    "_id" : null,
    "count" : 6.0
}

您可以嘗試以下查詢:

db.Ticket_master.aggregate([
  /** Get agents info who resolved tickets */
  {
    $lookup: {
      from: "Agent_master",
      localField: "RESOLVED_BY",
      foreignField: "_id",
      as: "agent_docs"
    }
  },
  /** As agent_docs is an array unwind into make it into objects */
  {
    $unwind: "$agent_docs"
  },
  /** Group on 'NAME' & count no.of occurrences of each NAME */
  {
    $group: {
      _id: "$agent_docs.NAME",
      COUNT: {
        $sum: 1
      }
    }
  },
  /** Transform fields into required format */
  {
    $project: {
      _id: 0,
      NAME: "$_id",
      COUNT: 1
    }
  }
])

測試: MongoDB-Playground

這是答案

db.Agent_master.aggregate([
    {
        $lookup: {
            "from": "Ticket_master",
            "localField": "_id",
            "foreignField": "RESOLVED_BY",
            "as": "tickets"
        }
    },
    {
        $project:  {
            Name: '$Name',
            Count: { $size: '$tickets'}
        }
    }
])

您必須使用 $lookup 來連接兩個集合。 由於您只需要 count 所以它只能由 $project 完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM