【发布时间】:2017-07-04 02:30:15
【问题描述】:
我有属于产品组的文档,如下所示:
[
{
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放回去了,但是不知道怎么说:
“按产品组id分组,包含所有原始字段”
所以我真的在尝试 $unwind 和 $sort products 数组,然后我想 $wind_it_back_up_again... :-)
我怎样才能做到这一点..?
更新:这个问题是关于在分组时保留所有字段。
【问题讨论】:
-
@Veeram 我认为这不仅是关于对内部数组进行排序的问题,而且是关于在分组时保留所有字段的问题,所以它是不同的
-
好的。要保留这些字段,您可以尝试这样的事情。
{$group: {_id: '$_id', options:{'$first:'$options'},'products': {$push: '$products'}}}并保持相同的休息。 -
同意你的观点:)
标签: javascript mongodb sorting mongoose