我有這兩個簡化的模式,我想「加入」基於IP地址。貓鼬 - 填充其他然後編號
var personSchema = Schema({
name: String,
ip: String
});
var logSchema = Schema({
message: String,
ip: String
});
它會工作,如果person._id是IP地址。但這不適合我。
目前我已經解決了這個問題,當新的日誌被保存時,我搜索該人並添加對日誌的引用。架構是那麼這樣的:
var logSchema = Schema({
message: String,
ip: String,
person: { type: Schema.Types.ObjectId, ref: 'Person' }
});
我讀過貓鼬Populate文檔,Document#populated和Model.populate()。我仍然不確定是否有可能。這個例子非常簡單,我使用mapReduce和日誌收集分組,因此人口對我來說會很好。
我也讀過Database references在我看來,唯一的選擇是基於_id填充。但它是純粹的mongodb,也許有另一種可能性使用貓鼬?
是否有可能填充不基於_id字段的查詢?
千萬要填寫您認爲最好再進行一次查詢,然後在每個日誌記錄中保存人員引用? –
@ Mr.Pohoda它並沒有真正幫助你,因爲你仍然必須做一個單獨的查詢('.populate'爲你做)。維護這種數據庫結構將會更困難。也許我還不夠清楚:使用'.populate'做一個單獨的查詢**而不是**。 – freakish
爲什麼填充使用較少的內存然後findOne?我剛剛查詢了20萬個條目(更大更容易看出差異),而使用填充時我的mongod進程永遠不會超過23%,但是當我使用findOne屬性時,它幾乎可以達到cpu的100%? – Snymax