Node.js 如何删除Mongoose中的文档,前提是其中一个字段符合某些条件?
我只想删除一个符合某些条件的项目。应该是这样的:Node.js 如何删除Mongoose中的文档,前提是其中一个字段符合某些条件?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我只想删除一个符合某些条件的项目。应该是这样的: Session.findOne({ id:req.body.sessionId },function(err,session){ if(session.user == req.body.userId) { session.remove(); } }); 这显然不起作用。我怎样才能做到这一点呢?你能不能把查询合并起来 Session.findOne({ id:req.body.sessionId, user: re
Session.findOne({ id:req.body.sessionId },function(err,session){
if(session.user == req.body.userId) {
session.remove();
}
});
这显然不起作用。我怎样才能做到这一点呢?你能不能把查询合并起来
Session.findOne({ id:req.body.sessionId, user: req.body.userId}).remove( callback );
你能不能把查询合并起来
Session.findOne({ id:req.body.sessionId, user: req.body.userId}).remove( callback );
老实说,只要做:
Session.remove({ "_id": req.body.sessionId },function(err,result) {
});
这样更有效、更安全
在您的示例中失败的原因是,变量不再是字符串,而是返回文档中的ObjectId。但这并不安全,所以不要那样做
如果您对匹配会话心存疑虑,请先执行以下操作:
if (session.user.toString() == req.body.userId) {
Session.remove({ "_id": req.body.sessionId },function(err,result) {
});
} else {
// Not the same
}
请注意,ObjectId与请求中的字符串不同。转换或铸造其中一个。老实说,只需执行以下操作:
Session.remove({ "_id": req.body.sessionId },function(err,result) {
});
这样更有效、更安全
在您的示例中失败的原因是,变量不再是字符串,而是返回文档中的ObjectId。但这并不安全,所以不要那样做
如果您对匹配会话心存疑虑,请先执行以下操作:
if (session.user.toString() == req.body.userId) {
Session.remove({ "_id": req.body.sessionId },function(err,result) {
});
} else {
// Not the same
}
请注意,ObjectId与请求中的字符串不同。转换或强制转换其中一个条件。您可以在Mongoose中同时测试多个条件。这应该对你有用
Session.findOne({
id: req.body.sessionId,
user: req.body.userId
})
.remove()
.exec();
您可以在Mongoose中同时测试多个条件。这应该对你有用
Session.findOne({
id: req.body.sessionId,
user: req.body.userId
})
.remove()
.exec();
如何在不立即删除实例的情况下测试if语句?您可以只测试findOne而不删除实例。如何在不立即删除实例的情况下测试if语句?您可以只测试findOne而不删除实例。如何在不立即删除实例的情况下测试if语句一次?@bmpasini你不需要。它要么匹配某个东西(_id是唯一的,所以只有一个东西)要么什么都不匹配。结果中将返回受影响的数字。请参阅添加的针对当前用户进行验证的更好处理。我最后只使用了
会话。在回调中删除。我不需要转换成字符串,但是…@bmpasini我想告诉你的是,如果你执行.findOne()
然后执行.remove()。此外,无需检查从.findOne()
返回的\u id
值是否与您要求的值相同。如果要在删除之前检查现有变量,请在访问数据库之前包装要检查的逻辑。这就是如何高效地进行操作。在查询会话之前,我应该如何检查session.user
?如何在不立即删除实例的情况下测试if语句?@bmpasini您不需要这样做。它要么匹配某个东西(_id是唯一的,所以只有一个东西)要么什么都不匹配。结果中将返回受影响的数字。请参阅添加的针对当前用户进行验证的更好处理。我最后只使用了会话。在回调中删除。我不需要转换成字符串,但是…@bmpasini我想告诉你的是,如果你执行.findOne()
然后执行.remove()。此外,无需检查从.findOne()
返回的\u id
值是否与您要求的值相同。如果要在删除之前检查现有变量,请在访问数据库之前包装要检查的逻辑。这就是你如何高效地做事。在查询会话之前,我应该如何检查session.user
?