理解できない 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 );
}
});
}
});
};
この PUT リクエストtom
は、配列から削除する場合 (およびのみtom
) に正常に機能します。
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
。MongoDB は、同じ PUT リクエストを'username': 'tom'
.
明示的に指定されたユーザー名のみが削除されるようにするにはどうすればよいですか?