我遇到了我不理解的 Mongoose/MongoDB 行为。即使没有指定用户,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;
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 请求工作正常:
jQuery.ajax({
url: '/remove_user',
type: 'PUT',
data: {
'doc_id': 66865270,
'username': 'tom'
},
success: function( data, textStatus, jqXHR ) {
console.log( 'Post response:' );
console.dir( data );
console.log( textStatus );
console.dir( jqXHR );
}
});
但是,假设tom
不存在,或者已经从数组中删除,当我使用'username': 'tom'
.
如何正确确保仅删除明确说明的用户名?