2015-05-16 2 views
1

Итак, у меня есть одна функция обновления, мне просто нужно знать, как обновлять один из элементов массива, а не вытирать и заменять все это.mongodb updateOne значение в массиве

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.....] 

ответ

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(); 
     }); 
}; 
+0

очень быстро, я предположил, что могу просто пойти «эпизод». + index: data .... index, равный двум в этом случае, для чего это обозначение? казалось бы, не найти его. – Jake

+0

Работает как благодарность за шарм, странно, как в случае добавления переменной вы должны предварительно сгенерировать всю команду, можно подумать, что вы можете просто установить переменную, которая является строкой, и заменить только часть эпизода. Спасибо снова. – Jake

0

Правильный синтаксис для операции набора является:

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

Обратите внимание, что episode.2 относится к 3-му элементу массива эпизод.