我有这两个简化的模式,我想“加入”基于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