Node.js 更改mongoose文档中的数据

Node.js 更改mongoose文档中的数据,node.js,mongodb,mongoose,database,nosql,Node.js,Mongodb,Mongoose,Database,Nosql,我是mongoose mongodb的新手,正在尝试更新存储的数据。我已经在这里的api中尝试了这个示例:但似乎做得不对。它说要查询并更新数据,我可以执行以下操作: Model.findOne({ name: 'borne' }, function (err, doc) { if (err) .. doc.name = 'jason borne'; doc.save(callback); }); 我正在这样做: user.find({ 'username': Username,

我是mongoose mongodb的新手,正在尝试更新存储的数据。我已经在这里的api中尝试了这个示例:但似乎做得不对。它说要查询并更新数据,我可以执行以下操作:

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');
    }
})

它返回结果查询数据,但是当我添加代码来更新布尔值“banked”时,我得到一个错误。我做错了什么?

我假设
user
变量是一个模型对象,您试图实现的是找到一个具有给定用户名和代码的单个用户,并将该用户的禁用属性设置为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
为空,则将发生
res.json('nope')

然后,代码将
userDoc
banked
属性设置为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');
  }
})

我假设
user
变量是一个模型对象,您试图实现的是找到一个具有给定用户名和代码的单个用户,并将该用户的禁用属性设置为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
为空,则将发生
res.json('nope')

然后,代码将
userDoc
banked
属性设置为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');
  }
})