mongodb - MongoDB $push 聚合不会保持正确的顺序
问题描述
我尝试使用 MongoDB 进行 $group 聚合,如下例所示:
"$group": {
"_id": "$test_id",
"feeling": {
"$push": "$feeling"
},
"reference_id": {
"$push": "$_id"
},
"training_start": {
"$push": "$training_start"
},
"training_duration": {
"$push": "$duration_ms"
}
}
聚合工作正常,但创建的数组排序不同。这意味着,如果我通过查看reference_id[x]和training_start[x]检查聚合结果,则源集合中training_start的值不等于training_start[x]。
也许一个例子更准确地说明了我的问题:
$group聚合后的一个文档:
{
_id: "string_1",
reference_id: [1, 2, 3],
training_start: [01:00:00, 02:00:00, 03:00:00] (date times)
}
来自源集合的文档:
{
_id:1,
training_start: 01:00:00,
test_id: "string_1"
},
{
_id:2,
training_start: 03:00:00,
test_id: "string_1"
},
{
_id:3,
training_start: 02:00:00,
test_id: "string_1"
}
这些数组中的第一个元素总是按正确的顺序排列。因此,我使用下面的代码检查了每个分组字段是否具有相同数量的条目。恼人的结果是,每个数组中的条目数量是相等的。因此,缺失值不会导致数组发生偏移。
"$group": {
"_id": "$test_id",
"sum": {
"$sum": {
"$cond": {
"if": {
"$lte": [
"$training_start", null
]
},
"then": 0,
"else": 1
}
}
}
有谁知道,如果有另一种方法来创建保持顺序的数组(已经尝试过$addToSet),推入的元素?还是我有问题?
问候马克斯
解决方案
推荐阅读
- unity3d - 在统一中,动画师从一个动画过渡到另一个动画将重置角色位置
- c# - 为什么AutoMapper按照文档实现时会抛出异常?
- java - Swagger @ApiParam 注释使在 Swagger UI 中使用 @PathVariable 注释的参数不再是必需的
- python - 使用 selenium chrome 设置代理地址
- php - 如何将印地语文本转换为 UTF-8?
- tfs - TFS:如何在创建项目之前创建项目组?
- asp.net-core - asp core 2.1 angular 6 iis 8无法找到css js文件
- css - 如何在 Aurelia 的点击事件中添加类?
- javascript - 如何从 index.html 中的动态脚本中删除内容
- django - 石墨烯 Django:更改字段名称