MongoDB使用$ sort将$ push更新为数组array

时间:2018-07-13 05:32:24

标签: 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}指定用于排序的特定子字段。不确定如何使用子数组的特定项目索引指定排序。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这是使用您的示例数据创建的集合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 ]
    ]
}

这是排序后的数组。

如果可以单独完成更新和排序,则可以先插入新的子数组,然后使用此命令对其进行排序。

请尝试一下,让我们知道它是否有效!