node.js - Mongoose 默认带 findOneAndUpdate

标签 node.js mongodb mongoose

我有以下架构:

var UserSchema = new Schema({
  username: { type: String, required: true, unique: true },
  displayName: { type: String, required: true },
  registered: { type: Boolean, required: true, default: false }
});

然后我尝试使用 findOneAndUpdate 插入和对象:

  var user = {
    displayName: "Test User"
  }

  User.findOneAndUpdate({username: "test"}, user, {new: true, upsert: true}, function(err, newUser) {
    callback(err, newUser);
  });

用户被正确创建(第一次尝试,因为它不存在)。但是注册字段不会设置为 false。当我执行 findOneAndUpdate 时会发生这种情况吗?

mongo查询结果:

> db.users.find().pretty()
{
    "_id" : ObjectId("56255f415641ace1204de658"),
    "username" : "Test",
    "displayName" : "Test User"
}

最佳答案

在 Mongoose 文档中找到了这个:

findAndModify helpers support limited defaults and validation. You can enable these by setting the setDefaultsOnInsert and runValidators options, respectively.

以防其他人遇到这种情况。

 var user = {
    displayName: "Test User"
  }

  User.findOneAndUpdate({username: "test"}, user, {setDefaultsOnInsert: true, new: true, upsert: true}, function(err, newUser) {
    callback(err, newUser);
  });

关于node.js - Mongoose 默认带 findOneAndUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224283/

相关文章:

javascript - 使用 UDP 的 Node.js 文件传输

javascript - 在 Bluebird Promise 中使用一个函数的结果调用另一个函数

node.js - 使用 sails.js 和 mongodb 查找子数组中对象 id $ 的文档

javascript - Actor 错误: Cast to ObjectId failed for value "id goes here" at path "_id" for model "Article"

forms - 从 Mongoose Schema 对象生成表单?

javascript - 导航后编剧错误(目标已关闭)

node.js - Keystone.js 管理 UI - 表单中没有字段

node.js - 表示 cookieSession 和 Mongoose : how can I make request. session.user 是 Mongoose 模型吗?

Mongodb updateMany 属性为其他属性的精确值

node.js - MongoDB Aggregate - 如何使用前一阶段的值作为下一阶段的字段名称?