Node.js 在mongodb中的特定值后插入数组项
我喜欢dbNode.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}}}); 但假
{"_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不保证修改集合中元素的特定顺序。