Как передать значение другому объекту или объединить объект?

#database #mongodb #sorting #group-by #projection

#База данных #mongodb #сортировка #группировать по #проекция

Вопрос:

Предположим, у вас есть следующие документы в моей коллекции:

 {
    "_id": ObjectId("5c7e3982a50f3b32d2668112"),
    "cat_id": 1,
    "cat_code": "YMN",
    "overall": {
        "temp_price": NumberInt(500),
    },
    "date_wise": [{
            "last_inserted_id": "11",
            "created_at": "2018-07-26",
            "overall": {
                "temp_fee": NumberInt(20),
                // .....
            },
        }, {
            "last_inserted_id": NumberInt(50),
            "created_at": "2018-08-01",
            "overall": {
                "temp_fee": NumberInt(100),
                // .....
            },
            "data": []
        }, {
            "last_inserted_id": "28",
            "created_at": "2018-08-02",
            "overall": {
                "temp_fee": NumberInt(22),
                // .....    
            },
        }
        // .....
    ]
} 
  

Я хочу выводить вот так:

 {
    "_id": {
        "created_at": "2018-07-26",
        "temp_fee": NumberInt(20),
    },
    "_id": {
        "created_at": "2018-08-01",
        "temp_fee": NumberInt(100),
    },
    "_id": {
        "created_at": "2018-08-02",
        "temp_fee": NumberInt(22),
    }
}
  

Я не профессионал в MongoDB, все еще на стадии обучения. Итак, мои усилия заключаются в следующем.

 db.collection.aggregate([
    {$match : {'cat_code': 'YMN'}},
    { $project: {overall1: "$date_wise.overall"}},
    { $group: { _id: '$overall1'}},
    {'$unwind':'$_id'},
    {'$skip':0},
    {'$limit':10},
    {'$sort': {'_id.created_at' : 1}}
]);
  

Я пытаюсь объединить одно значение, overall т.Е. created_at , и данные overall внутреннего date_wise ключа. Применение к сортировке, пропуску и ограничению для нее.

Комментарии:

1. Ваше утверждение не соответствует вашим данным. Возможно, вы имеете в виду «группировать» при "date_wise.created_at" суммировании всех значений на эту дату для "date_wize.overall.temp_fee" ? Или вы имеете в виду «суммировать все поля в overall «? Или действительно, что именно. Код явно некорректен, и в вашем описании действительно неясно, хотите ли вы просто temp_fee или ожидаются другие значения в том же объекте. Требуется уточнение в вопросе.

2. Спасибо за ваш ответ. Короче говоря, я хочу, "created_at": "2018-07-26", "temp_fee": NumberInt(20), на том же уровне.

3. То есть вы в основном просто хотите, чтобы эти два поля из каждого элемента массива были представлены в качестве документов верхнего уровня в ваших результатах? Это все? Никакой группировки или чего-либо еще, только эти поля.

4. ДА. Но для этих данных требуется сортировать, ограничивать и пропускать. Потому что я интегрирую разбивку на страницы, поиск и сортировку этих данных. и temp_fee — не единственный столбец в date_wise. в целом, столбцов больше. Итак, я хочу, чтобы все эти данные были в документе верхнего уровня в моих результатах