いつものように、ノードプロジェクトのように、ここで頭を悩ませています。何か間違ったことをしているのか、バグに遭遇したのかはわかりません。
サービスと呼ばれる任意の数の組み込みドキュメントを持つことができるサーバーのスキーマがあります。サーバーオブジェクトから個々のサービスを正常に削除したにもかかわらず、保存するように指示してもデータベースから削除されないという問題が発生しています。保存機能は、私が行った変更を保存し、新しい埋め込みドキュメントをプッシュするために機能しています。すでに存在するドキュメントを削除するだけではありません。
これが私のコードの比較的単純化された例です:
app.put('/server/:id', function(req, res, next){
app.Server.findOne({_id: req.params.id}, function(err, server) {
server.updated = new Date();
...
for (var num = _.size(req.body.server.services) - 1; num >= 0; num--){
// Is this a new service or an existing one
if (server.services[num]) {
// Is it marked for deletion? If so, delete it
if (req.body.server.services[num].delete == "true") {
server.services[num].remove()
} else { // else, update it
server.services[num].type = req.body.server.services[num].type
...
}
} else {
// It's new, add it
delete req.body.server.services[num]["delete"]
server.services.push(req.body.server.services[num]);
}
}
server.save(function(err){
if (!err) {
req.flash('success', 'Server updated')
} else {
req.flash('error', 'Err, Something broke when we tried to save your server. Sorry!')
console.log(err)
}
res.redirect('/')
});
})
});
したがって、remove()は実際にサービスを削除しています。保存する前にserver.toObject()を実行すると、そこにはありません。保存時にデータベースから削除されない理由はありますか?
編集:バージョン番号が役立つと思います。node@0.4.2、mongoose@1.1.5 express@2.0.0rc