首页 文章

猫鼬 - 填充其他然后id

提问于
浏览
2

我有这两个简化的架构,我想根据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#populatedModel.populate() . 我仍然不确定它是否可能 . 这个例子非常简单,我使用mapReduce和日志集合分组,因此人口对我来说很棒 .

我也读过Database references,在我看来,唯一的选择是基于_id填充 . 但它是纯粹的mongodb,也许还有另一种使用猫鼬的可能性?

是否可以不基于_id字段填充查询?

2 回答

  • 1

    MongoDB不支持连接 . 所以 .populate 只是进行了另一个查询,因此最好的解决方案是手动进行另一个查询 .

  • 1

    MongoDB 3.2引入了$ lookup聚合 . 你也可以和mongoose一起使用它 . 这是一个如何使用条件 find 的示例:

    Log.aggregate(
          { $match: {log_property: 'value'}},
          { $lookup: {from: 'person', localField: 'ip', foreignField: 'ip', as: 'user'} }
        ).exec( function (err, logs) {
          if (err) {
            next(err);
          }
    
          res.json(logs);
        }
      );
    

    在上面的示例中,每个日志上的 user 属性将使用匹配的Person模型文档中的人填充

相关问题