Mongodb $inc 嵌入值语法

发布于 2024-11-03 00:50:43 字数 834 浏览 1 评论 0原文

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

我尝试了几种具有类似结果的语法变体。我需要采取不同的方法吗?我已经验证我的文档存在并且有一个设置为 0 的 count.schedules 字段。

我可以使用如下命令直接设置该值:

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

但是如果我尝试使用该语法进行 $inc 操作,我会收到此错误:

Modifier $inc allowed for numbers only

谢谢

I'm trying to increment a field in my mongodb document using the $inc operator. The field I am trying to increment is a sub-property of my document's count field, e.g.:

mydoc: {
    count: {
        schedules: 0
    }
}

When I try this:

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

from my mongo shell, I get this error message:

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

I've tried several syntax variations with similar results. Do I need to take a different approach to this? I've verified my document exists and has a count.schedules field that is set to 0.

I can directly set the value using a command like this:

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

But if I try that syntax for the $inc operation, I get this error:

Modifier $inc allowed for numbers only

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感性不性感 2024-11-10 00:50:43

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

希望这有帮助!

Yes, you can do a $inc only on numbers. Here is how I tried to reproduce your problem, you can notice I've used proper quotes, which is the reason you are seeing the missing : after property id(shell):1 error.

> 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 } } }

Hope this helps!

む无字情书 2024-11-10 00:50:43

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

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

I think this may be a simple fix. Try putting quotes around count.schedules like so:

db.mydocs.update({ _id: new ObjectId('4db5c2f3dc73c5afdaffd636') }, { $inc: { 'count.schedules': 1 } }, { upsert: true, safe: true }, null);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文