node.js - 通过 Mongoose 使用 req.body 更新和/或添加数组元素属性?

标签 node.js mongodb express mongoose

我有以下文件:

{
    "_id" : ObjectId("503b83dfad79cc8d26000004"),
    "pdfs" : [
        {
            "title" : "Test document",
            "pdf_id" : ObjectId("504f6793ce351a595d000004"),
            "created_at" : ISODate("2012-09-11T16:32:19.276Z")
        },
        {
            "title" : "Some other doc",
            "pdf_id" : ObjectId("502bf124b4642341230003f0"),
            "created_at" : ISODate("2012-09-11T11:34:19.276Z")
        }
    ]
}

现在在通过 req.body 传入的表单中,我有 2 个字段:titledescription

我想更新 title 并为指定的 pdf_id 插入 description,我该怎么做?

所以最后,我的文档现在看起来像:

{
    "_id" : ObjectId("503b83dfad79cc8d26000004"),
    "pdfs" : [
        {
            "title" : "This is an UPDATED title",
            "description" : "It has an ALL NEW description",
            "pdf_id" : ObjectId("504f6793ce351a595d000004"),
            "created_at" : ISODate("2012-09-11T16:32:19.276Z")
        },
        {
            "title" : "Some other doc",
            "pdf_id" : ObjectId("502bf124b4642341230003f0"),
            "created_at" : ISODate("2012-09-11T11:34:19.276Z")
        }
    ]
}

为了清楚起见,我真的只是在寻找 Mongoose update 语法。

最佳答案

您可以使用 $ positional operator$set 中引用匹配的 pdfs 数组元素:

Model.update(
    { 'pdfs.pdf_id': pdf_id }, 
    { $set: { 
        'pdfs.$.title': title, 
        'pdfs.$.description': description 
    }}, function (err, numAffected) { ... }
);

关于node.js - 通过 Mongoose 使用 req.body 更新和/或添加数组元素属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374345/

相关文章:

javascript - ES2015 node.js 中的可选导入

node.js - 从外部信号正常关闭 Node.js 程序的最佳做法是什么?

mongodb - 在 mongodb 文档的列表中插入项目

javascript - Node.JS、ExpressJS、React 和 HTML JSON 渲染

javascript - 多个日期条目

Ruby 按键值分组哈希

python - 如何将 Django 连接到 MongoDB 数据库?

javascript - NodeJS 上传图片卡住了

javascript - promise 有条件执行

javascript - 为什么这个 JS 代码在大多数地方都能工作,但在我的机器上却不行?