我在MongoDB中有一个包含数组结构的文档。 如何按升序对数组元素进行排序?
以下是输入:
{
"id": 1,
"name": "sanjay",
"address": "Odisha",
"shoes": [
{
"brand": "puma",
"size": "10"
},
{
"brand": "bata",
"size": "11"
},
{
"brand": "rebook",
"size": "9"
},
{
"brand": "adidas",
"size": "7"
},
{
"brand": "bata",
"size": "8"
}
]
}
任何人都可以帮我查询按键的升序排序我的所有数组元素" size"?
以下是所需的输出。
{
"id": 1,
"name": "sanjay",
"address": "Odisha",
"shoes": [
{
"brand": "adidas",
"size": "7"
},
{
"brand": "bata",
"size": "8"
},
{
"brand": "rebook",
"size": "9"
},
{
"brand": "puma",
"size": "10"
},
{
"brand": "bata",
"size": "11"
}
]
}
你能帮我找一下确切的查询吗?
此致 桑杰
答案 0 :(得分:1)
在您的示例数据中,shoes.size
是字符串类型。在排序之前,您需要将其更改为Int。您可以使用以下查询来执行此操作。
db.collection.find().forEach(function(data) {
for (var ii = 0; ii < data.shoes.length; ii++) {
printjson(data._id);
print(data.shoes[ii].size);
db.shoe.update({
"_id": data._id,
"shoes.size": data.shoes[ii].size
}, {
"$set": {
"shoes.$.size": parseInt(data.shoes[ii].size)
}
});
}
});
更改后,使用aggregation按以下查询排序shoes
数组:
db.collection.aggregate({
$unwind: "$shoes"
}, {
$sort: {
"shoes.size": 1
}
}, {
$group: {
_id: "$_id",
"shoes": {
"$push": "$shoes"
},
"name": {
$first: "$name"
}
}
}).pretty()
修改强>
如果您要选择特定的brand
,请在match
条件中添加条件。
db.collection.aggregate({
$unwind: "$shoes"
}, {
$match: {
"shoes.brand": "bata"
}
}, {
$sort: {
"shoes.size": 1
}
}, {
$group: {
_id: "$_id",
"shoes": {
"$push": "$shoes"
},
"name": {
$first: "$name"
}
}
}).pretty()