各位大佬好:
菜鸟是我,使用微信云开发,MongoDB聚合查询树状目录数据的时候,嵌套排序碰到了一些问题。
我使用lookup聚合查询后.sort({rank: 1})只能对分类名进行排序,不能对书籍列表进行排序。
希望得到各位大佬的指导,感谢感谢~~
一、需求:
制作一个书籍分类列表,根据分类名对书籍数据进行树状目录展示。
二、当前错误结果:
分类名 rank:3
- 书名 rank:2
- 书名 rank:1
- 书名 rank:3
分类名 rank:2
- 书名 rank:2
- 书名 rank:3
- 书名 rank:1
分类名 rank:1
- 书名 rank:3
- 书名 rank:1
- 书名 rank:2
三、预期正确结果:
分类名 rank:3
- 书名 rank:3
- 书名 rank:2
- 书名 rank:1
分类名 rank:2
- 书名 rank:3
- 书名 rank:2
- 书名 rank:1
分类名 rank:1
- 书名 rank:3
- 书名 rank:2
- 书名 rank:1
四、数据表示例
category - 分类表:
[
{
"_id": 1,
"category": "novel",
"rank": 1
},
{
"_id": 2,
"category": "science",
"rank": 3
},
{
"_id": 3,
"category": "love",
"rank": 2
}
]
book - 书籍表
[
{
"_id": "book1",
"author": "author 1",
"category": "novel",
"stock": 10,
"time": 1564456048486,
"rank": 6,
"title": "novel 1"
},
{
"_id": "book3",
"author": "author 3",
"category": "science",
"stock": 30,
"rank": 13,
"title": "science 1"
},
{
"_id": "book4",
"author": "author 3",
"category": "science",
"stock": 40,
"rank": 22,
"title": "science 2"
},
{
"_id": "book2",
"author": "author 2",
"category": "novel",
"stock": 20,
"rank": 7,
"title": "novel 2"
},
{
"_id": "book5",
"author": "author 4",
"category": "science",
"stock": 50,
"rank": 12,
"title": null
},
{
"_id": "book6",
"author": "author 5",
"category": "novel",
"rank": 5,
"stock": "60"
}
]
五、我的查询代码
db.collection('category')
.aggregate()
.sort({
rank: 1, // 生效
})
.lookup({
from: 'book',
localField: 'category',
foreignField: 'category',
as: 'bookList',
})
.sort({
rank: 1, // 不生效
})
.end()
.then(
function (res) {
console.log(res)
return resolve({
code: 20000,
data: res.data
})
}
)
自己搞定了,使用pipeline子查询方法。