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