【问题标题】:Conditional $inc in MongoDB queryMongoDB 查询中的条件 $inc
【发布时间】:2015-05-19 10:49:07
【问题描述】:

我有一个包含如下文件的调查系统:

{
    "_id" : ObjectId("555b0b33ed26911e080102c4"),
    "question" : "survey",
    "subtitle" : "",
    "answers" : [ 
        {
            "title" : "option 1",
            "color" : "#FFEC00",
            "code" : "opt1",
            "_id" : ObjectId("555b0b33ed26911e080102ce"),
            "votes" : 0,
            "visible" : true
        }, 
        {
            "title" : "option 2",
            "color" : "#0bb2ff",
            "code" : "opt2",
            "_id" : ObjectId("555b0b33ed26911e080102cd"),
            "votes" : 0,
            "visible" : true
        }
    ]
}

现在,我正在提交投票,因此我需要为特定调查增加“投票”字段(取决于用户选择的选项)。

我的问题是:我可以有多个这样的文档,所以 我如何在这个数组中 $inc 字段 votes 以获取特定文档? 我尝试了这个查询(基于 @987654321 @),但它没有用:

db.bigsurveys.update(
   {_id: ObjectId('555b0b33ed26911e080102c4'), 'answers.$.code' : 'opt1'}, 
   { $inc : { 'answers.$.votes' : 1 } }
)

这里的主要问题是我可以有多个这样的文档。提前致谢!

【问题讨论】:

    标签: mongodb mongodb-query database nosql


    【解决方案1】:

    使用$elemMatch 和位置运算符$ 将查询更新为:

    db.bigsurveys.update({
       "_id": ObjectId("555b0b33ed26911e080102c4"),
       "answers": {
         "$elemMatch": {
           "code": "opt1"
         }
       }
     }, {
       "$inc": {
         "answers.$.votes": 1
       }
     })
    

    【讨论】:

    • 这正是我想要的。谢谢yogesh!
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多