通过映射排序记录 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"}
}
]);
我有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"}
}
]);