Node.js 更改mongoose文档中的数据
我是mongoose mongodb的新手,正在尝试更新存储的数据。我已经在这里的api中尝试了这个示例:但似乎做得不对。它说要查询并更新数据,我可以执行以下操作: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,
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');
}
})