簡體   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