【问题标题】:mongodb find the document by id and then group the result based on name fieldmongodb 通过 id 查找文档,然后根据 name 字段对结果进行分组
【发布时间】:2018-04-28 20:34:26
【问题描述】:

我有一个包含多个文档的集合,例如

{
    "_id" : ObjectId("5a64d076bfd103df081967ae"),
    "status" : "",
    "Number" : 53,
    "values" : [ 
        {
            "date" : "2015-05-18",
            "value" : 12.41
        },
        {
            "date" : "2015-05-19",
            "value" : 12.45
        },

    ],
    "Name" : "ABC Banking",
    "scheme":"ABC1",
    "createdDate" : "21-01-2018"
}

{
    "_id" : ObjectId("5a64d076bfd103df081967ae"),
    "status" : "",
    "Number" : 53,
    "values" : [ 
        {
            "date" : "2015-05-18",
            "value" : 13.41
        },
        {
            "date" : "2015-05-19",
            "value" : 13.45
        },

    ],
    "Name" : "ABC Banking",
    "scheme":"ABC2",
    "createdDate" : "21-01-2018"
}

我正在根据 Number 字段查询集合,例如

db.getCollection('mfhistories').find({'Number':53})

获取所有具有此编号的文档。

现在我想将名称为“ABC Banking”的所有集合分组到一个数组中。这样我就可以根据名称得到结果。

所以结果应该是这样的

{        
   "Name":"ABC Banking",
   [
     {
        "_id" : ObjectId("5a64d076bfd103df081967ae"),
        "status" : "",
        "Number" : 53,
        "values" : [ 
            {
                "date" : "2015-05-18",
                "value" : 13.41
            },
           {
               "date" : "2015-05-19",
               "value" : 13.45
           }, 
        ],
            "scheme":"ABC1",
            "createdDate" : "21-01-2018"
       },
       {
            "_id" : ObjectId("5a64d076bfd103df081967ae"),
            "status" : "",
            "Number" : 53,
            "values" : [ 
            {
               "date" : "2015-05-18",
               "value" : 13.41
            },
            {
               "date" : "2015-05-19",
               "value" : 13.45
            }
           ], 
          "scheme":"ABC2",
           "createdDate" : "21-01-2018"
         }
    ]
}

请帮忙..

谢谢, J

【问题讨论】:

    标签: mongodb mongodb-query aggregate


    【解决方案1】:

    您可以为此使用聚合框架:

    db.col.aggregate([
        {
            $match: { Number: 53, Name: "ABC Banking" }
        },
        {
            $group: {
                _id: "$Name",
                docs: { $push: "$$ROOT" }
            }
        },
        {
            $project: {
                Name: "$_id",
                _id: 0,
                docs: 1
            }
        }
    ])
    

    $$ROOT 是一个捕获整个文档的特殊变量。更多here

    【讨论】:

      【解决方案2】:
      db.mfhistories.aggregate(
      
          // Pipeline
          [
              // Stage 1
              {
                  $match: {
                      Number: 53
                  }
              },
      
              // Stage 2
              {
                  $group: {
                      _id: {
                          Name: '$Name'
                      },
                      docObj: {
                          $addToSet: '$$CURRENT'
                      }
                  }
              },
      
              // Stage 3
              {
                  $project: {
                      Name: '$_id.Name',
                      docObj: 1,
                      _id: 0
                  }
              }
      
          ]
      
      
      );
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 2023-01-12
        • 1970-01-01
        • 2013-09-30
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        相关资源
        最近更新 更多