Mongodb $ inc嵌入值语法

时间:2011-04-25 19:30:03

标签: javascript node.js mongodb database

我正在尝试使用$ inc运算符在我的mongodb文档中增加一个字段。我试图递增的字段是我的文档计数字段的子属性,例如:

mydoc: {
    count: {
        schedules: 0
    }
}

当我尝试这个时:

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

来自我的mongo shell,我收到此错误消息:

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 个答案:

答案 0 :(得分:5)

是的,你只能对数字进行$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 } } }

希望这有帮助!

答案 1 :(得分:3)

我认为这可能是一个简单的解决方法。尝试在count.schedules周围加上引号,如下所示:

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