通过映射排序记录 collections

Order records by mapping collections

我有2个collections如下

作者:

   {id:'1',name:'JK', bookCount:3}
   {id:'2',name:'SS', bookCount:2}
   {id:'3',name:'CC', bookCount:4}

Book: ( authorId : 作者的外键 collections)

   {name:'Book 1',authorId:1}
   {name:'Book 2',authorId:1}
   {name:'Book 3',authorId:1}
   {name:'Book 4',authorId:2}
   {name:'Book 5',authorId:2}
   {name:'Book 6',authorId:3}
   {name:'Book 7',authorId:3}
   {name:'Book 8',authorId:3}
   {name:'Book 9',authorId:3}

我想写一个 mongo 查询,它给出 books,ordered by -> 相应作者写的书的数量,按升序排列,即

   {name:'Book 4',authorId:2}
   {name:'Book 5',authorId:2}
   {name:'Book 1',authorId:1}
   {name:'Book 2',authorId:1}  
   {name:'Book 3',authorId:1}
   {name:'Book 6',authorId:3}
    .......

我该怎么办。提前谢谢! :)

根据您的输出,您应该只需要聚合 Book 集合和聚合查询,如下所示:

db.book.aggregate({
  "$group": {
    "_id": "$authorId",
    "names": {
      "$push": "$name"
    },
    "count": {
      "$sum": 1
    }
  }
}, {
  "$unwind": "$names"
}, {
  "$sort": {
    "count": 1
  }
}, {
  "$project": {
    "name": "$names",
    "authorId": "$_id",
    "_id": 0
  }
})

步骤:

1) 根据 authorId 对数据进行分组并进行计数 还制作一个包含该组中所有书籍的数组

2) 展开书数组

3) 根据您在分组时创建的计数字段排序

4) 最终以您需要的格式投影。

db.book.aggregate([
{"$group": { "_id" : "$authorId", "count": {"$sum" : 1}, 
  "arr" :   {"$push" : "$name" }}
},
{"$unwind" :"$arr"},
{"$sort":{"$count": 1 }},
{"$project": {"name" : "$arr", "authorId" : "$_id"}
}
 ]);