【问题标题】:Increment a property value of an element in array object mongodb-node增加数组对象 mongodb-node 中元素的属性值
【发布时间】:2018-08-27 18:35:25
【问题描述】:

我正在尝试增加一个元素的值,这是我的数组对象

"options": [
    {
        "key": "banana",
        "votes": 0
    },
    {
        "key": "apple",
        "votes": 0
    },
    {
        "key": "mango",
        "votes": 0
    },
    {
        "key": "grapes",
        "votes": 0
    }
]

我正在尝试增加选定对象的投票值 item 同时也匹配该数据的id

  db().collection('polls').update( 
            { _id: id, "options.key": item },
            {$set:  { $inc: { "options.$.votes" : 1 } }})

但它不起作用......这里的db() 是一个返回数据库的函数......我没有收到任何错误。

这是完整的数据

{
    "_id": {
        "$oid": "5aae26203ab1cc0f15e43dc6"
    },
    "author": "me",
    "title": "fruits you love the most",
    "options": [
        {
            "key": "banana",
            "votes": 0
        },
        {
            "key": "apple",
            "votes": 0
        },
        {
            "key": "mango",
            "votes": 0
        },
        {
            "key": "grapes",
            "votes": 0
        }
    ]
}

【问题讨论】:

    标签: node.js mongodb express mongodb-query


    【解决方案1】:

    删除$set 并尝试。它应该工作。此外,db 应该使用不带括号的 db 而不是 db()

    db.collection('polls').update( 
       { _id: id, "options.key": item },
       { $inc: { "options.$.votes" : 1 } }
    )
    

    如果您直接在 mongodb shell 中运行此查询,那么您需要在查询中指定 _id: ObjectId(id),这样您的查询将是:

    var id = '5aaf66812b0e3813178a8a14'
    db.collection('polls').update( 
       { _id: ObjectId(id), "options.key": item },
       { $inc: { "options.$.votes" : 1 } }
    )
    

    【讨论】:

    • 你是从 mongoose 还是直接在 mongodb 上运行这个脚本?
    • 如果它直接在 mongodb 上,那么你应该使用_id: ObjectId(id)
    【解决方案2】:

    你做的一切都是正确的,但只有一个错误是 $inc 不应该在 $set 内。

    以下将满足您的要求。

    db.collection.update( {"options.key": "香蕉" }, { $inc: { "options.$.votes" : 1 } } )

    【讨论】:

    • 这行得通,但我也想匹配数据 ID,所以它只是更新特定数据..
    • 那么您也可以在搜索过滤器中添加数据 id 字段。 :)
    猜你喜欢
    • 2016-07-25
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多