我是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”的值时,我收到一个错误。我做错了什么?
答案 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