【问题标题】:Mongodb $inc embedded value syntaxMongodb $inc 嵌入值语法
【发布时间】:2011-08-12 13:03:14
【问题描述】:

我正在尝试使用 $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

谢谢

【问题讨论】:

    标签: javascript node.js mongodb database


    【解决方案1】:

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

    希望这会有所帮助!

    【讨论】:

    • 完美,谢谢!我需要养成引用这些的习惯。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢!我把功劳归功于 lobster1234,因为他首先回答,但感谢您的帮助!
    • 我想在我的代码下方更新数据库中的字段值。我有一个“productview”字段,该字段将管理用户看到该产品但它不起作用的次数。比如自动递增。
    • Product.update({_id:req.params.productId},{$inc: {productview: 1}}, { upsert: true, safe: true }, null);
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2017-06-05
    • 2021-07-01
    • 2015-11-10
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多