javascript - Mongoose findOneAndUpdate 和 upsert 不返回错误,不影响文档

标签 javascript node.js mongodb mongoose

我有一个非常小的模型:

var CompanySchema = new mongoose.Schema({
    name: { type: String, required: true, unique: true },
});

var Company = mongoose.model('Company', CompanySchema)

如果单个文档不存在,我正在尝试添加它。目前,我测试时没有文档:

models.Company.findOneAndUpdate({
    name: 'companyName'
}, {upsert: true}, function(err, numberAffected, raw){
    console.log(err, numberAffected, raw)
})

这是使用 upsert options from the Mongoose docs

然而errnullnumberAffected 为null。为什么我的文档没有更新?

最佳答案

从 Mongoose 4+ 开始,不要忘记将 new: true 与 upsert 一起设置,否则您将获得旧文档作为返回值,而不是更新后的文档。

这非常棘手,尤其是在请求创建文档时,如果您没有指定 new: true,您会收到一个空文档(没有现有文档),但没有错误。

    var myObj = ...;
    collection.findOneAndUpdate(
    {uniqueAttr: myObj.uniqueAttr},
    myObj,
    {upsert: true, new: true},
    function(...) {...}

关于javascript - Mongoose findOneAndUpdate 和 upsert 不返回错误,不影响文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116522/

相关文章:

javascript - 在 ES6 中使用解构定义可选参数

javascript - 函数外部的全局变量返回未定义

json - 远程传输 session 在提供正确的 session ID 后没有响应

javascript - 如何循环遍历模型文件并初始化所有文件?

c# - Find 和 FindAsync 之间的区别

node.js - mongoose,如何在子文档中记录 update_time

javascript - 更改 iFrame 的全部内容

javascript - 如何使用 javascript 在 microsoft azure 分析图像 API 中发布图像而不是 URL?

带有 Socket.io 模块的 Node.js 与 XMPP - 优点和缺点

node.js - 通过回调或 Mongoose 模型验证 PassportJS?