扩展Mongo.Collection会破坏find()方法

时间:2016-01-24 18:26:17

标签: meteor

遵循优秀的Meteor Guide我试图扩展收藏。我的最终目标是创建在更新值时立即管理插入和更新的对象。我用我的Order课程尝试了这个:

Order = class Order {
  constructor(customerId, orderDate){
    this.document = {};
    this.document.customerId = customerId;
    this.document.orderDate = orderDate;
    this.document._id = Orders.insert(this.document);
  }

  // some class methods go here.
}

我的orders由客户ID和日期唯一定义。所以你不能在同一天发两个订单。因此,我使用自己的Mongo.Collection课程扩展了OrderCollection课程。这种抽象数据层以确保其中的数据保持唯一的关键:

class OrderCollection extends Mongo.Collection{

  constructor(collectionName){
    super(collectionName);
    this.attachSchema(
      new SimpleSchema({
        customerId: { type: String }, 
        orderDate: { type: Date }
      })
    );  
  }

  insert(list, callback){
    // check if the actual order already exists
    if (list._id){
      return _id;
    }

    // we won't insert a new order if a matching one exists. 
    var order = Orders.findOne({
      customerId: list.customerId,
      orderDate: list.orderDate
    });
    if (order){return order._id;}

    // create order and return it. 
    return super.insert(list, callback);
  }

  remove(selector, callback){
    return super.remove(selector, callback);
  }
}

Orders = new OrderCollection("orders");

这一切似乎都有效。当我创建一个新订单时,它要么创建一个新订单,要么返回具有正确_id的现有订单。因此,例如当我运行meteor reset然后输入新订单时,我检索与停止流星时相同的_id,重新启动它并再次尝试相同的插入:

{ document:                                                                                                                                                                                                    
  { customerId: 'QB6rEEJirGXS3oj6R',                                                                                                                                                                          
    orderDate: Fri Jan 29 2016 00:00:00 GMT+0000 (GMT),                                                                                                                                                       
    _id: 'AwmygYsPnxR86Ks6D' } }

这一切都很好并且表现得如预期的那样。但我似乎无法通过订阅或在客户端上调用Orders.find({}).fetch()来检索任何对象。

即使是msavin:mongol告诉我Orders集合是空的,即使我通过monogl接口向它添加新项目,它们也不会出现。我做错了什么?

更新

我正在使用SimpleSchema和Collections2,并想知道他们是否可能不支持我使用它的方式。

1 个答案:

答案 0 :(得分:0)

这是初学者的问题。以上都有效,问题在于客户端的订阅,而不是instance.autorun(function...)我写的instance.autorun = function...