我有以下SimpleSchema
Schema.Team = new SimpleSchema({
name:{
type:String
},
members: {
type: [Schema.User],
optional:true
}
});
我想在服务器上插入一个与当前用户一起的新团队文档作为参考(而不是嵌入式文档)。
我试过了:
Teams.insert({name:"theName",members:[Meteor.user()]}) // works but insert the user as an embedded doc.
Teams.insert({name:"theName",members:[Meteor.user()._id]}) // Error: 0 must be an object
我也试过两个步骤:
var id = Teams.insert({name:teamName});
Teams.update({ _id: id },{ $push: { 'users': Meteor.user()._id } });
然后我有另一个我不明白的错误:Error: When the modifier option is true, validation object must have at least one operator
那么如何插入带有对另一个模式的引用的文档呢?
答案 0 :(得分:1)
如果您只想在userId
集合中存储Team
个数组,请尝试:
Schema.Team = new SimpleSchema({
name:{
type:String
},
members: {
type: [String],
optional:true
}
});
然后
Teams.insert({ name: "theName", members: [Meteor.userId()] });
应该有效。稍后当您想要添加其他ID时,您可以:
Teams.update({ _id: teamId },{ $addToSet: { members: Meteor.userId() }});
答案 1 :(得分:0)
以下可能是您所使用的语法,假设您还使用AutoForm
。
如果您使用的是collection2
,您还可以为创建团队时添加自动值,以便自动将创建者添加到该团队,以便更方便。
Schema.Team = new SimpleSchema({
name: {
type:String
},
members: {
type: [String],
defaultValue: [],
allowedValues: function () {
// only allow references to the user collection.
return Meteor.users.find().map(function (doc) {
return doc._id
});
},
autoform: {
// if using autoform, this will display their username as the option instead of their id.
options: function () {
return Meteor.users.find().map(function (doc) {
return {
value: doc._id,
label: doc.username // or something
}
})
}
},
autoValue: function () {
if (this.isInsert && !this.isFromTrustedCode) {
return [this.userId];
}
}
}
});