更改mongoose文档中的数据

时间:2013-07-04 05:37:50

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

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

1 个答案:

答案 0 :(得分:4)

我假设user变量是一个Model对象,而你想要实现的是找到一个具有给定用户名和代码的用户,并设置该用户的禁用属性是真的。

首先,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的{​​{1}}属性设置为true,然后将文档保存回数据库。因为userDoc函数是异步的,所以您希望将save代码放在回调中,否则您将无法知道它是否实际发生。

我没有输入任何实际的错误处理代码,我已经离开了这个,但是在使用标准回调模式时你应该总是处理任何潜在的错误。


您也可以使用res.json('yep')

来实现这一目标
findOneAndUpdate