node.js - 更改 mongoose 文档中的数据

标签 node.js mongodb mongoose database nosql

我是 mongoose mongodb 的新手,正在尝试更新存储的数据。我在这里尝试了 api 中的示例:http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate但似乎做得不对。它说查询数据并更新它,我可以这样做:

Model.findOne({ name: 'borne' }, function (err, doc) 
{
  if (err) ..
  doc.name = 'jason borne';
  doc.save(callback);
});

我正在这样做:

user.find({ 'username': Username, 'code': Key}, function(err, check){
    var callback5;
    if((String(check)) === "")
    {
        res.json('nope');
    }
    else
    {
        banned: true;
        user.save(callback5);
        res.json('yep');
    }
})

它返回结果查询数据,但是当我添加代码来更新 bool 值“banned”时,出现错误。我做错了什么?

最佳答案

我假设 user 变量是一个 Model 对象,并且您想要实现的目标是查找具有给定用户名和代码的单个用户,并将该用户的禁止属性设置为 true。

首先,user.find 将返回一组用户,而不仅仅是单个用户,因此您需要使用 user.findOne 来代替。

user.findOne({ username: Username, code: Key}, function(err, userDoc) {
    if (err)
    {
        // TODO: Handle the error!
    }
    if (! userDoc)
    {
        res.json('nope');
    }
    else
    {
        userDoc.banned = true;
        userDoc.save(function (err) {
            if (err)
            {
                // TODO: Handle the error!
            }
            res.json('yep');
        });
    }
})

这会在数据库中查询与用户名和代码匹配的单个文档。如果 userDoc 为 null,则 res.json('nope') 将会发生。

然后,代码将 userDocbanned 属性设置为 true,然后将文档保存回数据库。由于 save 函数是异步的,因此您需要将 res.json('yep') 代码放入回调中,否则您将不知道它是否实际发生。

我没有放入任何实际的错误处理代码,我已将其留给您来做,但在使用标准回调模式时,您应该始终处理任何潜在的错误。

<小时/>

您还可以使用 findOneAndUpdate 来实现此目的:

var conditions = { username: Username, code: Key };
var update = { banned: true };
user.findOneAndUpdate(conditions, update, function (err)
{
  if (err)
  {
      res.json('nope');
  }
  else
  {
      res.json('yep');
  }
})

关于node.js - 更改 mongoose 文档中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17462585/

相关文章:

mysql - 在 nodeJS 应用程序中发送默认角色

ruby-on-rails - Ruby on Rails 和 MongoDB

javascript - 用于将子文档连接到其父文档的端点,不返回任何内容

mongodb - 在 mongodb/mongoose 中存储颜色十六进制值的最佳方法是什么

javascript - 要求在测试文件中导出默认模块

mysql - 无法使用链接的 mysql 数据库在 docker 中启动应用程序

node.js - MongoDB - 使用代码 :100 关闭

javascript - 如何将单选按钮选择(每个都有一个字符串值)保存到特定 Mongoose 模型中的字符串数组?

Node.JS 向 mongodb Web API 插入数据,bodyParser 问题

mongodb - 在 Mongoose 中使用连接和过滤器进行查询