繁体   English   中英

Node js mongodb使用变量中的索引更新数组

[英]Node js mongodb updating array with index in variable

我有一个mongoDB文档,当它以对象形式出现时,您将像这样访问所需的数组:

map.layers.1.data.INDEX

这是我目前拥有的:

//Where = index, to = change to this
selector["data.layers.1.data."+where];
mDB.update({"_id":msg.island+msg.map}, {$set:{selector:to}} , function(err, doc) {
    console.log(doc);
});

(我用Tiled制作了地图。)数据是一个数组,我只想更新那个数组索引。 但是该索引必须来自变量。 在mongoDB中有没有办法做到这一点?

我目前正在阅读整个文档,然后替换所需的数据,然后更新整个文档。 那不是很好,很快或没有必要(我希望)。

不确定我是否理解您的描述-示例文档会有所帮助-但我将继续介绍。 假设您的文件看起来像

{
    "data" : {
        "layer" : [
            { "data" : [ 2, 5] },
            { "data" : [ 99 ] },
            { "data" : [ 0, 1, 2, 3 ] },
            { "data" : [ -1, "truffles", 6 ] },
        ]
    }
}

那么您可以更新存储为变量myIndex的值的数组data.layer.2.data的固定索引,就像在mongo shell中一样(类似于node但同步,没有回调)

var myIndex = complicatedprocedureforgeneratingtheindex() // myIndex = 1
var mySet = {}
mySet["data.layer.2.data." + myIndex] = to
db.map.update(myQuery, { "$set" : mySet })
db.map.find(myQuery)
{
    "data" : {
        "layer" : [
            { "data" : [ 2, 5] },
            { "data" : [ 99 ] },
            { "data" : [ 0, 99, 2, 3 ] },
            { "data" : [ -1, "truffles", 6 ] },
        ]
    }
}

大致来说(例如,有想法但没有复制粘贴未定义变量的b / c)

这就是答案!

为了用给定的索引更新数组,必须在更新之前分别定义一个对象:

set = {};

然后使用[]包含将索引指定为对象的属性。

set['example.nested.object.' + i] = foo; 

然后只需更新您的MongoDB

Collection.update($set: set);

应该管用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM