サブドキュメント「連絡先」を含むマングースでユーザースキーマを設定しました。サブドキュメント「連絡先」は、実際の連絡先 (別のユーザー オブジェクトへの参照) と「友情」に関連するいくつかのデータを含む連絡先オブジェクトのコレクションです。
私のフロントエンド アプリケーションでは、連絡先リストにユーザーを追加または削除することで、連絡先を管理できるようになりました。フロントエンドは、これらの変更を HTTP PUT リクエストとしてサーバーに保存します。
PUT 要求には、データベース上のユーザー オブジェクトを多かれ少なかれ置き換えるユーザー オブジェクト全体が含まれます。残念ながら、サブドキュメント コレクションを置き換えることはできません。新しいものをプッシュするか、削除することしかできません。
スキーマは次のとおりです。
var UserSchema = new Mongoose.Schema({
username: {
type: String,
index: { unique: true, sparse: true },
required: true, lowercase: true, trim: true
},
email: {
type: String,
index: { unique: true, sparse: true },
required: true, lowercase: true, trim: true
},
contacts: [ContactSchema]
});
var ContactSchema = new Mongoose.Schema({
user: {
ref: "User",
type: Mongoose.Schema.ObjectId
},
isContact: {
type: Boolean,
default: true
}
});
現在、連絡先をすべて削除してリクエストに追加することで、連絡先を置き換えようとしています。
app.put('/me', loadUser, function(req, res, next) {
var user = req.user;
req.user.contacts.forEach(function(contact) {
req.body.contacts.forEach(function(contact) {
contact.remove();
});
});
req.body.contacts.forEach(function(contact) {
req.user.contacts.push(contact);
});
user.save(function(err, user) {
if (err) return next(err);
res.send(200);
});
});
このサブドキュメント コレクションをリクエストの状態に更新する方法について、実際に誰かがより良い考えを持っていますか?