Node.js Mongoose/MongoDB删除型号'中的项目;s数组,但不说明哪个项
我遇到猫鼬/猫鼬的行为,我不理解。Mongoose正在从阵列中删除用户,即使没有指定用户 以下是模式:Node.js Mongoose/MongoDB删除型号'中的项目;s数组,但不说明哪个项,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我遇到猫鼬/猫鼬的行为,我不理解。Mongoose正在从阵列中删除用户,即使没有指定用户 以下是模式: var DocSchema = new Schema({ doc_id : String, users: [String], }); 以下是从阵列中删除用户的控制器: exports.remove_user = function(req, res) { doc_id = req.body.doc_id; username = req.body.username; Doc
var DocSchema = new Schema({
doc_id : String,
users: [String],
});
以下是从阵列中删除用户的控制器:
exports.remove_user = function(req, res) {
doc_id = req.body.doc_id;
username = req.body.username;
Document.findOne({doc_id: doc_id}, function(err, doc_data) {
if (err) {
throw (err);
} else {
var users = doc_data.users;
var index = users.indexOf(username);
users.splice(index, 1);
doc_data.save(function(err) {
if (err) {
throw (err);
} else {
console.log( 'removed user from doc' );
return res.send( doc_data );
}
});
}
});
};
当我想从数组中删除tom
时(并且仅tom
),该PUT请求工作正常:
但是,假设tom
不存在,或者已经从数组中删除,当我使用'username':'tom'
执行相同的PUT请求时,MongoDB似乎会任意删除另一个用户
如何正确地确保仅删除明确声明的用户名?您使用的
splice
不正确
var users = ['tom', 'dick', 'harry'];
var index = users.indexOf('john');
users.splice(index, 1);
console.log(users);
//[ 'tom', 'dick' ]
这不是任意的,您没有检查索引>=0
。您可以通过更改标准来完全避免这种情况:
Document.findOne({doc_id: doc_id, users: username}, function(err, doc_data) {
如果doc.users
不包含该用户名,则该查询将返回null
doc\u数据。或者,您可以在调用splice
之前检查index
Document.findOne({doc_id: doc_id, users: username}, function(err, doc_data) {