1

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

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

4

2 回答 2

1

如果您只想在集合中存储一个userIds数组,请尝试: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() }});
于 2015-09-24T00:49:51.920 回答
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];
      }
    }
  }
});
于 2015-09-24T16:49:21.493 回答