Mongodb $ inc синтаксис встроенного значения - PullRequest
3 голосов
/ 25 апреля 2011

Я пытаюсь увеличить поле в моем документе mongodb с помощью оператора $ inc. Поле, которое я пытаюсь увеличить, является подсвойством поля счета моего документа, например ::10000

mydoc: {
    count: {
        schedules: 0
    }
}

Когда я пытаюсь это сделать:

> db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $inc: { count.schedules: 1 } }, { upsert: true, safe: true }, null);

из моей оболочки Монго, я получаю это сообщение об ошибке:

Mon Apr 25 11:59:05 SyntaxError: missing : after property id (shell):1

Я пробовал несколько вариантов синтаксиса с похожими результатами. Нужно ли по-другому подходить к этому? Я проверил, что мой документ существует и имеет поле count.schedules, которое установлено в 0.

Я могу напрямую установить значение с помощью такой команды:

 db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $set: { count: {  schedules:1 } } }, null, null);

Но если я попробую этот синтаксис для операции $ inc, я получу эту ошибку:

Modifier $inc allowed for numbers only

Спасибо

Ответы [ 2 ]

5 голосов
/ 25 апреля 2011

Да, вы можете сделать $inc только на числах.Вот как я пытался воспроизвести вашу проблему, вы можете заметить, что я использовал правильные кавычки, поэтому вы видите ошибку missing : after property id(shell):1.

> db.schedules.save({"mydoc": { "count": { "schedules": 0}}});                                                                                                     
> db.schedules.find();                                         
{ "_id" : ObjectId("4db5cf199e631c2a52a7c643"), "mydoc" : { "count" : { "schedules" : 0 } } }
> db.schedules.update({ _id: new ObjectId("4db5cf199e631c2a52a7c643") }, { $inc: { "mydoc.count.schedules": 1 } }, { upsert: true, safe: true }, null);
> db.schedules.find();                                                                                                                                  
{ "_id" : ObjectId("4db5cf199e631c2a52a7c643"), "mydoc" : { "count" : { "schedules" : 1 } } }

Надеюсь, это поможет!

3 голосов
/ 25 апреля 2011

Я думаю, что это может быть простым исправлением. Попробуйте поставить кавычки вокруг count.schedules примерно так:

db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $inc: { 'count.schedules': 1 } }, { upsert: true, safe: true }, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...