meteor - 如何使用SimpleSchema添加子文档作为引用

时间:2015-09-23 23:11:10

标签: meteor simple-schema

我有以下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

那么如何插入带有对另一个模式的引用的文档呢?

2 个答案:

答案 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];
      }
    }
  }
});