MongoDB агрегация и прогнозирование - PullRequest
0 голосов
/ 14 сентября 2018

Может кто-нибудь помочь мне с запросом для сортировки массива по дате в порядке возрастания, а также для отображения 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 голосов
/ 14 сентября 2018

Ваше поле 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 }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...