以下工作正常:
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')
这是设计的吗?或者我错过了什么?
如果它有价值,我使用的是Mongo 3.0.12和Mongoose 4.4.20。
答案 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);
});