У меня есть документы, которые являются группы товаров, например:
[
{
options: [],
products: [
{
sku: '123',
name: 'Product name 1'
}, {
sku: '476',
name: 'Product name 2'
}
]
}, {
options: [],
products: [
{
sku: '265',
name: 'Product name 3'
}, {
sku: '789',
name: 'Product name 4'
}
]
}
]
Что мне нужно сделать, это расширенный запрос, который включает в себя сортировку не только группы товаров, но и массивы продукции внутри.
Метод, который я пытаюсь в настоящее время является использование aggregate()
с $unwind
и $sort
, а затем попытаться поставить группу вместе (после того, как $unwind
нарушил products
массив из).
Products.aggregate([
{ $unwind: '$products' },
{ $sort: {
'products.sku': -1
} },
{ $group: {
'_id': '$_id',
something: { $push: '$$ROOT' }
} }
]).exec()
Это, очевидно, $group
, это не так. Я использую '_id': '$_id'
поставить оригинальный MongoDB _id
назад, но я не знаю, как сказать:
«группа группового идентификатора продукта, и включают в себя все оригинальные поля»
Так на самом деле я пытаясь $unwind
и $sort
массив продуктов, то я хочу $wind_it_back_up_again
... :-)
Как я могу достичь этого ..?
Обновление: Этот вопрос касается сохранения всех полей при группировке.
Возможный дубликат [MongoDB рода внутренний массив] (http://stackoverflow.com/questions/15388127/mongodb-sort-inner-array) – Veeram
@Veeram Я думаю, что это вопрос не только о сортировке внутренний массив, но также и о сохранении всех полей при группировке, так что это разные –
Хорошо. Чтобы сохранить поля, вы можете попробовать что-то вроде этого. '{$ group: {_id: '$ _id', options: {'$ first:' $ options '},' products ': {$ push:' $ products '}}}' и сохраняем как одно и то же. – Veeram