Meteor React发布合并集合

时间:2017-02-09 17:39:35

标签: reactjs meteor meteor-react

使用Meteor(1.4.2.3)和React,我的集合Objects的{​​{1}}引用了集合itemId

目前,我在客户端订阅了该集合:

Items

这很完美,但我认为在服务器端合并集合更为优雅。但是,我找到的解决方案似乎都没有效果

转换集合定义

export default createContainer(() => {
  let objectsSub = Meteor.subscribe('allObjects');
  var objects = Objects.find({}, {
      transform: function (doc) {
        doc.item = Items.findOne({
          _id: doc.itemId
        });
        return doc;
      }
    }).fetch();
  return {
    objects: objects,
  }
}, App);

控制台提供:

  

错误:转换必须返回对象

在发布时进行转换

const Objects = new Mongo.Collection('objects',
  {
    transform: function (doc) {
      doc.item = Items.findOne({
        _id: doc.itemId
      })
    }
  });
  

TypeError:无法读取未定义的属性“name”

if (Meteor.isServer) { Meteor.publish('allObjects', function () { return Objects.find({}, { sort: { startedAt: -1 }, transform: function (doc) { doc.item = Items.findOne({ _id: doc.itemId }); return doc; } }); }); }; 属于name

的属性

1 个答案:

答案 0 :(得分:0)

我通常在发布中这样做:

  Meteor.publish('allObjects', function () {
    let cursor = Objects.find({}, {
      sort: { startedAt: -1 });
    });

    let transformData = (fields) => {
        fields.item = Items.findOne({
          _id: fields.itemId
        });

        return fields;
    };

    let handle = cursor.observeChanges({
        added: (id, fields) => {
            fields = transformData(fields);
            this.added('objects', id, fields);
        },
        changed: (id, fields) => {
            fields = transformData(fields);
            this.changed('objects', id, fields);
        },
        removed: (id) => {
            this.removed('objects', id);
        }
    });

    this.ready();

    this.onStop(() => {
        handle.stop();
    });
  }