我的文件是产品组,如下所示:
[
{
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
一起使用,然后尝试将该组重新组合在一起({{1}之后已经打破了$unwind
数组。
products
显然Products.aggregate([
{ $unwind: '$products' },
{ $sort: {
'products.sku': -1
} },
{ $group: {
'_id': '$_id',
something: { $push: '$$ROOT' }
} }
]).exec()
不正确。我使用$group
将原始的MongoDB '_id': '$_id'
放回去了,但我不知道怎么说:
"按产品组ID分组,并包含所有原始字段"
所以,我真的尝试_id
和$unwind
产品数组,然后我想$sort
......: - )
我怎样才能做到这一点..?
更新:此问题是关于在分组时保留所有字段。
答案 0 :(得分:1)
也许我错了,但据我所知,在分组时无法保留所有字段,您必须手动定义所有属性。这是您正在寻找的代码,它按“products.sku”键对产品组进行排序,按“sku”键对内部“products”数组进行排序,并在$ group和$ project阶段保留所有字段。
db.test.aggregate([
{$unwind: "$products"},
{$sort: {"products.sku": -1}},
{$group: {
_id: {_id: "$_id", options: "$options"}, products: {$push: "$products"}
}},
{$project: {
_id: "$_id._id",
options: "$_id.options",
products: "$products"
}},
{$sort: {"products.sku": -1}}
]).pretty();