【问题标题】:Update and/or add array element properties using req.body via Mongoose?通过 Mongoose 使用 req.body 更新和/或添加数组元素属性?
【发布时间】:2012-09-04 15:46:07
【问题描述】:

我有以下文件:

{
    "_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 传入的表单中,我有两个字段: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 语法。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

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

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

    【讨论】:

    • $set 中,有没有办法动态分配这些属性?用户可能不提供一些,我宁愿不必明确指定它们。
    • 当然,您只需要以编程方式构建$set 对象,然后将该对象作为第二个参数传递给update 调用。有点像另一个问题:stackoverflow.com/questions/12184626/…
    • 酷,谢谢。让我绊倒的事情,可能对其他人有帮助:当我将数组设置为混合[] 时,它不会为我更新。我必须为数组构建架构,并确保您尝试更新的数组元素的 _id 在您的架构中指定为 type: Schema.Types.ObjectId
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2014-08-03
    相关资源
    最近更新 更多