2015-10-04 2 views
0

Предположим, у меня есть этот документ i mongodb.Как увеличить все элементы массива от позиции a до b в mongodb?

{ "_id" : 1, "seats" : [ 80, 85, 90, 95 ] } 
{ "_id" : 2, "seats" : [ 88, 90, 92, 97 ] }, 
{ "_id" : 3, "seats" : [ 85, 100, 90, 85 ] }, 

Я хочу, чтобы увеличить массив сиденья из положения 1 в положение 3 "_id": 1 и сделать его "seats": [80,86, 91, 96]. Как достичь этого?

ответ

0

Чтобы обновить каждый элемент в массиве seats по указанному индексу, необходимо выполнить цикл над каждым элементом для этого индекса и использовать оператор $inc для увеличения значения с помощью операции "bulk".

var bulkOp = db.collection.initializeOrderedBulkOp(); 
var fromIndex = 1 
var toIndex = 3 

db.collection.find({ '_id': 1 }).forEach(function(doc) { 
    var seats = doc.seats; 
    for(var index = fromIndex; index <= toIndex; index++) { 
     bulkOp.find({ '_id': doc._id, 'seats': seats[index] }) 
       .updateOne({ '$inc': { 'seats.$':1 } }); 
bulkOp.execute(); 

Тогда db.collection.find({ '_id': 1 }) дает

{ "_id" : 1, "seats" : [ 80, 86, 91, 96 ] } 
2

Вы можете попробовать сочетание обоих оператора $inc обновление и dot notation для доступа к элементам массива мест на нулевой основе индексировать позицию и увеличивать их на единицу. Следующие update() операция использует $inc оператора, чтобы увеличить массив сиденья из положения 1 в положение 3 "_id": 1 поля 1:

db.collection.update(
    { "_id": 1 }, 
    { 
     "$inc": { 
      "seats.1": 1, 
      "seats.2": 1, 
      "seats.3": 1 
     } 
    }  
); 
Смежные вопросы