mongodb - 来自 MongoDB 查询的排序结果
问题描述
我正在通过 Mongoose 在 ExpressJS 中执行 MongoDB 查询。
我的文件如下所示
{
"name": "first",
"spellings": [
"here",
"is",
"you"
],
"keyStageLevel": 4,
"spellingLevel": 2,
"__v": 0
},
{
"name": "second",
"spellings": [
"her",
"is",
"another"
],
"keyStageLevel": 2,
"spellingLevel": 3,
"__v": 0
},
{
"name": "third",
"spellings": [
"snother",
"list"
],
"keyStageLevel": 2,
"spellingLevel": 4,
"__v": 0
}
我希望返回我的查询结果,以便 1)按keyStageLevel
顺序排列,2)在每个keyStageLevel
中spellingLevel
按顺序显示文档的详细信息。
keyStageLevel 2
spellingLevel 3
name: "second",
"spellings": [
"her",
"is",
"another"
]
spellingLevel 4
name: "third",
"spellings": [
"snother",
"list"
]
keyStageLevel 4
spellingLevel 2
etc
我的代码目前正在运行
var spellings = await Spelling.aggregate([{"$group" : {_id:{keyStageLevel:"$keyStageLevel",spellingLevel:"$spellingLevel"}}} ]);
哪个返回
[
{
"_id": {
"keyStageLevel": 2,
"spellingLevel": 4
}
},
{
"_id": {
"keyStageLevel": 2,
"spellingLevel": 3
}
},
{
"_id": {
"keyStageLevel": 5,
"spellingLevel": 1
}
},
{
"_id": {
"keyStageLevel": 4,
"spellingLevel": 2
}
}
]
非常感谢您的帮助。
解决方案
您最关心$group
的"keyStageLevel"
是使用$push
. 如果您希望按特定顺序获得结果,那么您总是需要$sort
在喂食阶段之前和之后$group
:
var spellings = await Spelling.aggregate([
{ "$sort": { "keyStageLevel": 1, "spellingLevel": 1 } },
{ "$group" : {
"_id": { "keyStageLevel": "$keyStageLevel" },
"data": {
"$push": {
"spellingLevel": "$spellingLevel",
"name": "$name",
"spellings": "$spellings"
}
}
}},
{ "$sort": { "_id": 1 } }
])
第一个$sort
确保添加的项目$push
按该顺序累积,最后一个确保“输出”实际上按所需顺序排序,因为$group
除非您指示这样一个阶段,否则可能不会总是以任何特定顺序返回分组键.
这将为您提供如下输出:
{
"_id" : {
"keyStageLevel" : 2
},
"data" : [
{
"spellingLevel" : 3,
"name" : "second",
"spellings" : [
"her",
"is",
"another"
]
},
{
"spellingLevel" : 4,
"name" : "third",
"spellings" : [
"snother",
"list"
]
}
]
}
{
"_id" : {
"keyStageLevel" : 4
},
"data" : [
{
"spellingLevel" : 2,
"name" : "first",
"spellings" : [
"here",
"is",
"you"
]
}
]
}
推荐阅读
- microsoft-graph-api - 添加对现有帖子或评论的反应
- flutter - 为什么隔离器没有收到停止消息?
- java - 尝试使用视图模型检索 Edittext 输入时获取原始数据
- c# - 单击一次未将 appsettings 安装到用户计算机
- angular - 已解决 - 使用 i18n 翻译 mat-tab
- python - Python - 比较整个数据框给出的结果与单个元素不同
- r - lapply() 使用 XPath 获取特定标记后的所有文本不起作用
- javascript - 电子:将图像加载到新窗口
- reactjs - React Konva 绘制没有直径的半圆周
- flutter - Flutter:使用持久侧栏导航