我正在尝试使用$ 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
由于
答案 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);