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

Node.js 在mongodb中的特定值后插入数组项,node.js,mongodb,database,Node.js,Mongodb,Database,我喜欢db {"_id" : 1 , children: ["2", "123", "5"]} 我想在子数组中插入一个元素。当你知道索引的时候就很容易了$位置可用于此目的。喜欢 db.module_menu.update({"_id" : "1"} , {$push : {"children" : { $each : ["12"] , $position : 1}}}); 但假

我喜欢db

{"_id" : 1 , children: ["2", "123", "5"]}
我想在子数组中插入一个元素。当你知道索引的时候就很容易了$位置可用于此目的。喜欢

db.module_menu.update({"_id" : "1"} , 
                      {$push : {"children" : { 
                                  $each : ["12"] , $position : 1}}});
但假设我不知道位置索引,我知道要插入的元素的值

我有
值:12
和要在后面插入的值<代码>插入者:2

因此,它应该是

{"_id" : 1, text: "" , children: ["2","12", "123", "5"]}
我怎么做


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

恐怕不可能。有一个古老的问题需要使用,但唯一的方法是读取、修改和持久化数组

另一方面,如果需要一组嵌入文档,则可以使用。
$
可用于
$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:1的基础上操作的


另一种方法是检索数据-执行就地更新并将完整数组集推回mongo

您可以尝试使用$addToSet$addToSet$addToSet可能无法保持数组顺序$addToSet就像$push?它将添加到集合的末尾。我错了吗?不,它们在这一点上是不同的:$addToSet只确保不会向集合中添加重复项,并且不会影响现有的重复元素$addToSet不保证修改集合中元素的特定顺序。