2
單位的has_many StationInstances組通過在mongoid/mongodb的
StationInstance belongs_to的單元
我通過在mongoid UNIT_ID要組站的實例。
根據unit_id獲得所有站點實例的查詢是什麼?
單位的has_many StationInstances組通過在mongoid/mongodb的
StationInstance belongs_to的單元
我通過在mongoid UNIT_ID要組站的實例。
根據unit_id獲得所有站點實例的查詢是什麼?
您可以直接使用group(內部爲map縮減)方法在mongo中執行此操作,就像您在sql中所做的那樣。代碼
db.StationInstance.group({key:{unit_id:true},
cond:{},
reduce:function(a,b){b.sum++;},
initial:{sum:0}});
這將返回只有數
>> [ { "unit_id" : xxxx, "sum" : 1 }, { "unit_id" : zzzzz, "sum" : 2 } ]
但你不能用它
相處的StationInstance項目相反,你可以使用MongoDB的map-reduce做..檢查以下代碼
map = function() {
emit(this.unit_id,{count:1,StationInstance:this._id});
}
在map函數中,您可以按unit_ StationInstance的ID(因爲它屬於unit,它將有unit_id),並通過count來聚合它。因爲普通的計數不返回整個對象,我們明確地返回的StationInstance
reduce = function(k, values) {
var result = {count: 0, StationInstance: []};
values.forEach(function(value) {
result.count += value.count;
result.StationInstance.push(value.StationInstance);
});
return result;
}
的ID(或只是this
任何領域或整個對象),並在降低再算上分組項目,並把StationInstances到一個數組
最後發出
db.StationInstance.mapReduce(map,reduce,{out: { inline : 1}})
將返回所希望的結果
在01做到這一點,只是stringfiy
功能映射&減少和使用它像
StationInstance.collection.mapreduce(map,reduce,{:out => {:inline => 1},:raw=>true })
它有一些調整工作。但是不清楚'{:inline => 1}'和':raw => true'的作用是什麼? – Autodidact 2012-01-05 09:48:48
@Millisami,inline是reduce的輸出選項,意思是它告訴mongo在內存中執行時不會創建任何臨時集合,如果數據很小,則適合它。檢查鏈接以獲取更多信息http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Outputoptions – RameshVel 2012-01-05 13:35:29
在map函數中,我們將'unit_id'發送爲'emit(this.unit_id,{count:1 ,StationInstance:this._id});'如果,而不是'this.unit_id',我想要獲得單元的文件模型中的標題? – Autodidact 2012-01-06 05:12:25