2016-01-24 19 views
1

繼優秀Meteor Guide我試圖玩擴展集合。我的最終目標是創建對象,以便在更新值時立即管理插入和更新。我想這與我的Order類:擴展Mongo.Collection打破find()方法

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和奇蹟,如果他們以某種方式可能不支持我使用這種方式。

回答

0

這是一個初學者的問題。以上所有的工作,問題是在客戶端訂閱,而不是instance.autorun(function...)我寫了instance.autorun = function...