MongoDB聚合和投影

时间:2018-09-14 05:28:22

标签: mongodb aggregation-framework

有人可以帮助我按日期对数组进行升序排序并显示cCode吗?我能够对数组进行排序和投影,但是无法将cCode与bal数组一起投影,

db.collection.aggregate([
  { "$match": {
    "_id": {
      "$eq": {
        "a": "NA",
        "b": "HXYZ",
        "c": "12345",
        "d": "AA"
      }
    }
  }},
  { "$unwind": "$bal" },
  { "$sort": { "bal.date": 1 }},
  { "$group": {"_id": "$_id",
     "bal": {"$push": "$bal"}}},
  { $project: {
      bal: { $slice: ["$bal",2]} ,"cCode": 1}
  }
])

我的收藏集:

/* 1 */
{
    "_id" : {
        "a" : "NA",
        "b" : "HXYZ",
        "c" : "12345",
        "d" : "AA"
    },
    "cCode" : "HHH",

       "bal" : [
     {
            "type" : "E",
            "date" : "2015-08-02"

    },

    {
            "type" : "E",
            "date" : "2015-08-01"


    },
     {
            "type" : "E",
            "date" : "2015-07-07"


    }

 ]
 }

请帮助我上述查询中出现的问题。预先感谢。

1 个答案:

答案 0 :(得分:0)

使用cCode阶段时,您的$group字段消失了。因此,要在管道中再次获取该字段,您需要使用$first聚合。像这样

db.collection.aggregate([
  { "$match": {
    "_id": { "$eq": { "a": "NA", "b": "HXYZ", "c": "12345", "d": "AA" }}
  }},
  { "$unwind": "$bal" },
  { "$sort": { "bal.date": 1 }},
  { "$group": {
    "_id": "$_id",
    "bal": { "$push": "$bal" },
    "cCode": { "$first": "$cCode" }
  }},
  { "$project": { "bal": { "$slice": ["$bal", 2] } ,"cCode": 1 }}
])