1

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

它返回生成的查询数据,但是当我添加代码以更新布尔值“禁止”的值时,我得到一个错误。我究竟做错了什么?

4

1 回答 1

5

我假设该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')则将发生。

然后代码将 的banned属性设置userDoc为 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');
  }
})
于 2013-07-04T10:51:21.773 回答