Я настроил пользовательскую схему с мангустом, которая содержит вложенный документ «контакты». Поддокумент «Контакты» представляет собой набор объектов контактов, которые содержат фактический контакт (ссылка на другой пользовательский объект) и некоторые данные, связанные с «дружбой».
В моем внешнем приложении теперь я могу управлять контактами, добавляя или удаляя пользователей в свой список контактов. Внешний интерфейс сохраняет эти изменения как 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);
});
});
Есть ли у кого-нибудь лучшее представление о том, как я могу обновить эту коллекцию вложенных документов до состояния в запросе?
_id
, он должен перезаписать его - person Gianfranco P.   schedule 20.11.2012