在mongodb中的特定值后插入一个数组项

时间:2016-03-04 09:17:32

标签: node.js mongodb database

我有db喜欢;

{"_id" : 1 , children: ["2", "123", "5"]}

我想在children数组中插入一个元素。当你知道索引时很容易。 $ position可用于此目的。等;

db.module_menu.update({"_id" : "1"} , 
                      {$push : {"children" : { 
                                  $each : ["12"] , $position : 1}}});

但是让我说我​​不知道​​位置索引,我知道我想要插入的元素的值。

我有value: 12和我想要插入的值。 insertAfter: 2

结果应该是;

{"_id" : 1, text: "" , children: ["2","12", "123", "5"]}

我该怎么办?

遍历children数组中的每个元素,找到value的索引,并使用$ position,插入值。这是唯一的方法吗?

2 个答案:

答案 0 :(得分:1)

我担心这是不可能的。使用$function in update是一个古老的问题,但您只能阅读,修改和保留数组。

另一方面,如果你有一系列嵌入式文档,那么你可以使用$ positional operator$可用于$set简单数组中的值,但可用于$push

> db.test.find()
{ "_id" : ObjectId("56d9570d09e01f20e254d0f3"), "a" : [ 1, 2, 3 ] }
> db.test.update({"_id": ObjectId("56d9570d09e01f20e254d0f3"), "a": 2},
                 {$push: {a: {$each: [2], $position: "$"}}})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 2,
        "errmsg" : "The value for $position must be a positive numeric value not a String"
    }
})

答案 1 :(得分:0)

没有任何功能可以一次获得位置和更新, 所以在你的问题中,你需要在更新前获得位置并将其传递给查询 - 这意味着我们在1:1的贝司上操作。

其他方法是检索数据 - 执行就地更新并将完整数组设置回mongo