我对MongoDB完全陌生,在学习的过程中非常享受。但现在我在在中间。事实上,我有如下数据:我想应用一些排序操作,如按标记排序
{
"_id": 1,
"gender": "m",
"score": [
{
"marks": 86,
"subject": "Eng",
"grad": "A"
},
{
"marks": 76,
"subject": "Computers",
"grad": "A"
}
],
"age": 18
},
{
"_id": 2,
"gender": "m",
"score": [
{
"marks": 96,
"subject": "Eng",
"grad": "A+"
},
{
"marks": 66,
"subject": "Computers",
"grad": "B"
}
],
"age": 18
}
Hi在给定的文档中,score
数据是嵌套的,因此您应该使用聚合进行排序,因此以下方法可以按标记进行排序
db.collectionName.aggregate({"$unwind":"$score"},{"$sort":{"score.marks":-1}})
或
db.collectionName.aggregate({"$sort":{"score.marks":-1}})
或作为chridam的参考
db.collectionName.find().sort({"score.marks": -1})
db.collectionName.find()._addSpecial( "$orderby", { "score.marks": -1 })
db.collectionName.find( { $query: {}, $orderby: { "score.marks": -1 } } )
如果你想只使用subjects
和marks
mongo项目
db.collectionName.aggregate({"$unwind":"$score"},{"$sort":{"score.marks":-1}},
{"$project":{"marks":"$score.marks","subject":"$score.subject","_id":0}})
如果有任何条件,则$match用于ex:
db.collectionName.aggregate({"$unwind":"$score"},{"$sort":{"score.marks":-1}},{"$match":{"score.subject":"Eng"}},
{"$project":{"marks":"$score.marks","subject":"$score.subject","_id":0}})