MongoDB 使用 $sort 更新 $push 到数组数组

标签 mongodb mongodb-query

我有一个格式为:

{
    "_id": "test",
    "TestArr": [
        [1, 2],
        [2, 3],
        [3, 4]
    ]
}

我想在“TestArr”数组中插入另一个数组,并同时按每个子数组中的第二项对其进行排序。

我已经确认我可以做到:

db.ArrayTest.update(
    { "_id" : "test" },
    {
       $push: {
           "TestArr" : {
               $each : [[6,3]],
               $sort: 1 
           }
       }
    }
 )

这导致文档:

{ 
    "_id" : "test", 
    "TestArr" : [
        [1.0, 7.0], 
        [2.0, 3.0], 
        [3.0, 4.0], 
        [6.0, 3.0]
   ]
}

我真正想要的是:

{ 
    "_id" : "test", 
    "TestArr" : [
        [2.0, 3.0],
        [6.0, 3.0]
        [3.0, 4.0],
        [1.0, 7.0]   
   ]
}

$sort : 1 在该更新中似乎正在对整个子数组进行排序。我知道在对文档数组进行排序时,我可以使用 $sort : { field: 1 } 指定特定的子字段进行排序。不确定如何使用子数组的特定项目索引指定排序。

感谢任何帮助。

最佳答案

这是使用您的示例数据创建的集合ArrayTest:

{
        "_id" : "test",
        "TestArr" : [
                [ 1, 7 ],
                [ 2, 3 ],
                [ 3, 4 ]
        ]
}

输入聚合查询:

db.ArrayTest.aggregate([
    {
        $match : { "_id" : "test" }
    },
    {
        $unwind : "$TestArr"
    },
    {
        $sort : { "TestArr.1" : 1 }
    },
    {
        $group:{
            _id : "$_id",
            TestArr : {$push:"$TestArr"}
        }
    }
])

这里我们首先使用 $unwind 阶段,然后使用 $sort 阶段根据其中的第二个元素对子数组进行排序。

输出:

{
    "_id" : "test",
    "TestArr" : [ 
        [ 2, 3 ],
        [ 3, 4 ],
        [ 1, 7 ]
    ]
}

这是排序后的数组。

如果更新和排序可以分开进行,可以先插入新的子数组,然后使用该命令对它们进行排序。

请试试这个,如果有效请告诉我们!

关于MongoDB 使用 $sort 更新 $push 到数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318206/

相关文章:

javascript - 按照说明操作后,MongoDB 将无法连接到 C9

javascript - 使用 Angularjs 和 Mongoose 进行无限滚动 - 性能

mongodb - 按 IP 类别分组

java - 如何在mongo中插入带有日期的文档?

c++ - MongoDB C 驱动程序 : how to use regex query collection?

java - 在java中将新数据添加到mongodb中的现有集合中

mongodb - 如何使用 docker-compose 设置带有 pymonogo 应用程序的 mongodb?

mongodb - 如何验证 ObjectID

java - Spring Data MongoDB - 保存 LocalDate/LocalDateTime 时,值被设置为昨天

ruby-on-rails - 学习 Mongoid 的最佳教程是什么?