我有这两个简化的架构,我想根据IP地址“加入” .
var personSchema = Schema({
name: String,
ip: String
});
var logSchema = Schema({
message: String,
ip: String
});
如果person._id是ip地址,它将起作用 . 但这对我来说不是一个选择 .
目前我已经解决了这个问题,当新日志保存时,我搜索人并添加对日志的引用 . Schema就是这样的:
var logSchema = Schema({
message: String,
ip: String,
person: { type: Schema.Types.ObjectId, ref: 'Person' }
});
我读过mongoose Populate documentation,Document#populated和Model.populate() . 我仍然不确定它是否可能 . 这个例子非常简单,我使用mapReduce和日志集合分组,因此人口对我来说很棒 .
我也读过Database references,在我看来,唯一的选择是基于_id填充 . 但它是纯粹的mongodb,也许还有另一种使用猫鼬的可能性?
是否可以不基于_id字段填充查询?
2 回答
MongoDB不支持连接 . 所以
.populate
只是进行了另一个查询,因此最好的解决方案是手动进行另一个查询 .MongoDB 3.2引入了$ lookup聚合 . 你也可以和mongoose一起使用它 . 这是一个如何使用条件
find
的示例:在上面的示例中,每个日志上的
user
属性将使用匹配的Person模型文档中的人填充