2015-07-03 4 views
0

У меня есть коллекция «Приложение» в следующем виде:Как написать этот MongoDB оператор обновления

{ 
    "_id" : "<id>", 
    "versions" : { 
     "2_2_1" : 5, 
     "2_2_2" : 38, 
     "2_2_3" : 76 
    } 
} 

Я хочу, чтобы увеличить номер версии на основе версии приложения, которое посылает запрос. Как я могу написать оператор $ inc для моего запроса на обновление?

Возможно, я не могу заставить мой запрос работать, потому что инкрементный номер версии всегда может меняться от запроса к запросу. Я не могу заставить оператор positional $ корректно работать для моего запроса.

+0

что отправить по вашему запросу ключевое слово или значение, например, '2_2_1' или' 5'? – Yogesh

+0

Запрос отправляет номер версии, то есть «2_2_1». – Alistair

ответ

1

используется "dot notation" для того, чтобы получить доступ к стоимости в соответствии, специфические «версии», но и вы будете иметь, чтобы «построить» ключ объекта на любом языке, который вы используете.

В примере JavaScript:

var request = "2_2_1"; 
var update = { "$inc": { } }; 

update["$inc"]["versions." + request] = 1; 

Это дает:

{ "$inc": { "versions.2_2_1": 1 } } 

Таким образом, вы просто выполнить обновление:

db.collection.update({ "_id": id },update); 

Если это "запрос" версия под-ключ существует то он «увеличивается» от предыдущего значения. Если это «новый» ключ, тогда начальное значение будет 1.

+0

Это работает! Спасибо, я никогда не думал о создании моего запроса на обновление таким образом, я пытался это сделать с помощью оператора $ positional и не мог понять это правильно. – Alistair

Смежные вопросы