Mongoose populate与exec()一起使用但不与cursor()一起使用

时间:2016-09-23 20:41:50

标签: node.js mongodb mongoose mongoose-populate

以下工作正常:

Campaign.find({
   ...
})
  .populate('summary')
  .lean(true)
  .exec()
  .then(function (data) {
    console.log(data)
  })

但是,如果我尝试对游标执行相同的操作:

var cursor = Campaign.find({
   ...
})
  .populate('summary')
  .lean(true)
  .exec
  .cursor()

cursor.next().then(function (data) {
  console.log(data)
})
未填充

summary字段,仅返回模型引用的ObjectId

修改

以下是我的架构的相关部分:

var ObjectId = mongoose.Schema.Types.ObjectId
var campaignSchema = mongoose.Schema({
  // ...
  summary: { type: ObjectId, ref: 'summaries' },
  // ...
}

var summarySchema = mongoose.Schema({
  // ...
}

var Campaign = mongoose.model('Campaign', campaignSchema, 'campaigns')
var Summary = mongoose.model('Summary', summarySchema, 'summaries')

这是设计的吗?或者我错过了什么?

编辑#2

如果它有价值,我使用的是Mongo 3.0.12和Mongoose 4.4.20。

1 个答案:

答案 0 :(得分:0)

你应该使用Schema.Types.ObjectId而不是ObjectId,而ref值应该是Summary而不是summaries,那么它应该正常工作。

var campaignSchema = mongoose.Schema({
  // ...
  summary: { type: Schema.Types.ObjectId, ref: 'Summary' },
  // ...
}

var summarySchema = mongoose.Schema({
  // ...
}

var Campaign = mongoose.model('Campaign', campaignSchema)
var Summary = mongoose.model('Summary', summarySchema)

并且cursor无需使用.exec

var cursor = Campaign.find({
   ...
})
  .populate('summary')
  .lean(true)
  .cursor();

cursor.next(function(error, doc) {
  console.log(doc);
});