mongodb updateOne数组

时间:2015-05-16 23:47:05

标签: arrays mongodb

所以我有一个更新的函数,我只需要知道如何更新数组中的一个元素而不是擦除并替换整个元素。

labelRelease = function(db, callback){
    db.collection($$showName).updateOne(
    {'showName' : $$showName},
    {
        $set: {'episode[2]' : data + label}
    }, function(err, results){
        callback();
    });
}

我正在使用更新的代码的精简版本,显然episode[2]不能只选择一个数组元素我怎么能实现这个?

数据库的相关部分

episode:[episode1, episode2, episode3.....]

2 个答案:

答案 0 :(得分:1)

您可以使用dot notation

按位置更新数组元素
labelRelease = function(db, callback){
    db.collection($$showName).updateOne(
        {'showName' : $$showName},
        {
            $set: {'episode.2' : data + label}
        }, 
        function(err, results){
            callback();
        });
};

如果索引2在变量中,则需要分几步建立$set值:

var index = 2;
var setValue = {};
setValue['episode.' + index] = data + label;

labelRelease = function(db, callback){
    db.collection($$showName).updateOne(
        {'showName' : $$showName},
        {
            $set: setValue
        }, 
        function(err, results){
            callback();
        });
};

答案 1 :(得分:0)

设置操作的正确语法是:

$set: { 'episode.2' : ... } }

请注意,episode.2指的是剧集数组的第3个元素。