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

Yig*_*Can 5 database mongodb node.js

我有 db 喜欢;

{"_id" : 1 , children: ["2", "123", "5"]}
Run Code Online (Sandbox Code Playgroud)

我想在子数组中插入一个元素。当您知道索引时,这很容易。$position 可用于此目的。喜欢;

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

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

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

结果应该是;

{"_id" : 1, text: "" , children: ["2","12", "123", "5"]}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

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

Tho*_*oll 1

恐怕这是不可能的。$function在更新中使用一个古老的问题,但唯一的方法是读取、修改和保留数组。

另一方面,如果您有一组嵌入文档,则可以使用$位置运算符。可以$用于$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"
    }
})
Run Code Online (Sandbox Code Playgroud)