如何将find().sort()应用于mongoDB中的多维数据



我对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 } } )

如果你想只使用subjectsmarks 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}})

最新更新