我已经用猫鼬建立了一个用户模式,其中包含一个子文档“联系人”。子文档“联系人”是联系人对象的集合,其中包含实际联系人(对另一个用户对象的引用)和一些与“友谊”相关的数据。
在我的前端应用程序中,我现在可以通过在我的联系人列表中添加或删除用户来管理联系人。前端将这些更改保存为对服务器的 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);
});
});
有人真的知道如何将这个子文档集合更新为请求中的状态吗?