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

标签 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() 是一个返回数据库的函数。我没有收到任何错误。

这里是完整的数据

{
    "_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
        }
    ]
}

最佳答案

删除 $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 } }
)

关于node.js - 增加数组对象 mongodb-node 中元素的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49358925/

相关文章:

node.js - Mongoose 加密中间件聚合后不调用

javascript - 使用路线javascript中的id从数据库中删除项目

node.js - 如何在 express 中使用 co 全局处理错误

javascript - router.delete 返回空数组

javascript - Mongoose 和 express : POST data from subdocument

node.js - 如何使用 es6 语法将 Express 模块作为函数导入?

node.js - Sequelize 通过关联创建

node.js - 如何在保持 Express 服务器运行的同时制作 grunt watch 指南针?

mongodb - 如何在AWS上运行mongodb

node.js - Mongoose/MongoDB 更新不起作用