更新mongoose时删除_id

时间:2016-07-15 10:48:15

标签: node.js mongodb mongoose

当我使用_id更新子文档时,_id部分会被写入,所以我没有任何唯一元素可供下次更新。有谁可以帮我解决这个问题?我正在使用Mongoose.js

这是查询

action.sendKeys(driver.findElement(By.xpath("//input[@name='data[param_p][1]']")), 
"250000").build().perform();

以下是更新前的数据

       return Organization.update({
            'orgId': values.orgId,
            "companyStatus._id": values.companyStatusId
        }, {
            $set: {
                "companyStatus.$": values.companyStatus
            }
        })

并在更新后

companyStatus: [{
            "name" : "Manger",
            "_id" : ObjectId("5788b9dec116c39753f77cfb")
        }, 
        {
            "name" : "Open",
            "_id" : ObjectId("5788b9dec116c39753f77cfe")
        }]

所以我没有唯一的ID来下次更新此记录

我发送更新的数据

companyStatus: [{
            "name" : "Manger"
        }, 
        {
            "name" : "Open",
            "_id" : ObjectId("5788b9dec116c39753f77cfe")
        }]

1 个答案:

答案 0 :(得分:0)

你可以分享这个集合的find()。limit(2)的结果吗?你提供的是有点​​混乱。

首先,您需要了解数组更新中$运算符的行为:

https://docs.mongodb.com/manual/reference/operator/update/positional/#up.S

您的更新命令正在替换'companyStatus'数组的整个文档。就像删除所有键并设置新闻一样。

如果你真的想在这个数组中更新,你可以这样做:

return Organization.update({
        'orgId': values.orgId,
        "companyStatus._id": values.companyStatusId
    }, {
        $set: {
            "companyStatus.$.name": values.companyStatus.name
        }
    })

或者你可以在companyStatus键中迭代(如果你想更新另一个字段)并创建一个“set”对象。