Meteor Autoform,集合挂钩 - 如何在集合插入后插入用户配置文件数组?
Meteor Autoform, collection hooks - How to insert into user profile array after a collection insert?
我试图在自动表单插入另一个集合 (Meteor.users) 后插入用户配置文件数组。
我的简单模式数组是这样设置的——
(在个人资料架构中)
listings: {
type: [String],
optional: true
},
"listings.$.id": {
type: String,
optional: true
}
这是我的 collection-hook 方法,应该在列表插入之后插入。
//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
}
}
)
});
由于 $ 运算符,现在我无法插入数组。
假设列表只是一个包含 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 }
}
});
});
这会将您的列表从字符串数组更改为对象数组 - 您不能在字符串上有 属性 of id
。然后,您可以使用相关对象对 profile.listings 数组执行 $push。如果您真的只是在列表中存储 ID,则可以进一步简化:
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 属性。
我试图在自动表单插入另一个集合 (Meteor.users) 后插入用户配置文件数组。
我的简单模式数组是这样设置的—— (在个人资料架构中)
listings: {
type: [String],
optional: true
},
"listings.$.id": {
type: String,
optional: true
}
这是我的 collection-hook 方法,应该在列表插入之后插入。
//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
}
}
) });
由于 $ 运算符,现在我无法插入数组。
假设列表只是一个包含 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 }
}
});
});
这会将您的列表从字符串数组更改为对象数组 - 您不能在字符串上有 属性 of id
。然后,您可以使用相关对象对 profile.listings 数组执行 $push。如果您真的只是在列表中存储 ID,则可以进一步简化:
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 属性。