增加数组对象mongodb-node中元素的属性值

时间:2018-03-19 08:52:53

标签: node.js mongodb express mongodb-query

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

"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()这里是一个返回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
        }
    ]
}

2 个答案:

答案 0 :(得分:2)

删除$set然后尝试。它应该工作。此外,db应该使用db而不是db(),而不是db.collection('polls').update( { _id: id, "options.key": item }, { $inc: { "options.$.votes" : 1 } } )

_id: ObjectId(id)

如果您直接在mongodb shell中运行此查询,则需要在查询中指定var id = '5aaf66812b0e3813178a8a14' db.collection('polls').update( { _id: ObjectId(id), "options.key": item }, { $inc: { "options.$.votes" : 1 } } ) ,以便查询:

npm i -S express

答案 1 :(得分:0)

你做的事情都是正确的但只有一个错误 $ inc 不应该在 $ set 里面。

以下将满足您的要求。


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