Meteor Autoform, ловушки для коллекций - Как вставить в массив профиля пользователя после вставки в коллекцию?
Я пытаюсь вставить в массив профиля пользователя после вставки автоформ в другую коллекцию (Meteor.users).
Мой простой массив схем настроен так - (в схеме профиля)
listings: {
type: [String],
optional: true
},
"listings.$.id": {
type: String,
optional: true
}
И это мой метод ловушки коллекции, который должен быть вставлен после перечисления вставки.
//Add listing to user collection on submit
Listings.after.insert(function(userId, doc) {
console.log("STUFF");
Meteor.users.update({_id : userId},
{
$push :
{
'profile.listings.$.id' : this._id
}
}
На мой взгляд, это должно работать. Форма вставляется корректно без хука, но теперь, когда я отправляю форму, я получаю эту ошибку в консоли JS:
Ошибка: после фильтрации ключей, не входящих в схему, ваш модификатор теперь пуст (…)
Запускается console.log("stuff"), я вижу это в консоли до ошибки.
У кого-нибудь есть идеи, как это сделать?
РЕДАКТИРОВАТЬ - исправлено несколько вещей, переключив его на:
Listings.after.insert(function(userId, doc) {
console.log("STUFF" + userId + ' ' + this._id);
Meteor.users.update({_id: userId },
{
$set :
{
"profile.listings.$.id" : this._id
}
}
)});
Теперь я не могу вставить в массив из-за оператора $.
1 ответ
Предполагая, что списки - это просто массив объектов с id
поле, вы могли бы сделать:
listings: {
type: [Object],
optional: true
},
"listings.$.id": {
type: String,
optional: true
}
Listings.after.insert(function(userId, doc) {
var id = this._id;
Meteor.users.update({_id: userId }, {
$push : {
"profile.listings" : { id: id }
}
});
});
Это изменит ваши списки с массива строк на массив объектов - вы не можете иметь свойство id
на струне. Это тогда позволяет вам делать $ push для массива profile.listings с рассматриваемым объектом. Если вы буквально просто храните идентификатор в списках, вы можете упростить это еще больше:
listings: {
type: [String],
optional: true
}
Listings.after.insert(function(userId, doc) {
var id = this._id;
Meteor.users.update({_id: userId }, {
$push : {
"profile.listings" : id
}
});
});
Может быть, вы пропускаете некоторый код, но с вашей текущей схемой вам ничего не нужно, кроме массива строк - не нужно свойство id.