我目前正在使用猫鼬v4.10.8
,并试图在定义的模型上填充多个数组。具有mongoose.populate返回空阵列
TransportModel.js
//Transport model
'use strict';
const mongoose = require('mongoose');
const TransportSchema = new mongoose.Schema({
tag: {
type: String,
enum: ['X', 'Y'],
required: true,
unique: true
},
chairs: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Chair"
}],
targets: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Target"
}]
});
module.exports = mongoose.model('Transport', TransportSchema);
ChairModel.js
//Chair model
'use strict';
const mongoose = require('mongoose');
const ChairSchema = new mongoose.Schema({
product_name: {
type: String,
required: true,
unique: true
},
description: {
type: String,
unique: false,
required: false
}
});
module.exports = mongoose.model('Chair', ChairSchema);
TargetModel.js
//Target model
'use strict';
const mongoose = require('mongoose');
const TargetSchema = new mongoose.Schema({
target_name: {
type: String,
required: true,
unique: true
},
location: {
type: String,
required: true,
unique: false
},
description: {
type: String,
unique: false,
required: false
}
});
module.exports = mongoose.model('Target', TargetSchema);
后以上配置到位后,我创建了一个Chair
文件和一个Target
文件。
之后,我调用下面的逻辑路径上得到一个Transport
文件:
TransportModel.findOne({
tag: 'X'
})
.populate("chairs")
.populate("targets")
.exec(function(err, transport) {
if (err) {
console.error(err);
}
console.log('Transport: ', transport);
});
});
下面是检索文件:
{
"_id": "xxxx9999xxxx9999xxxx9999",
"tag": "X",
"__v": 1,
"chairs": [],
"targets": []
}
因此,即使我质疑Chairs
和Targets
集合,我确实至少有1个文档,Transport
文档没有得到填充。
此外,我也尝试过的.populate()
的增强版本,但我不断收到空数组:
.populate({
path: "chairs",
model: "Chair"
})
.populate({
path: "targets",
model: "Target"
})
你怎么了'Chair'和'Target'文档添加到'TransportModel'文件? – robertklep
感谢您的回复,@robertklep。这就是我想用'.populate()'实现的目标,我希望'Transport'文件的'chairs'和'targets'数组自动填充整个可用的'Chair'和'Target'列表来自各自馆藏的文件。 –
尽管这不是人口的问题。这是将各个集合中的_particular_文档关联起来的一种手段。换句话说,您必须手动将新的“Chair”文档与“TransportModel”文档相关联。然后'.populate()'方法将在查询期间自动添加关联的文档。请参阅文档:http://mongoosejs.com/docs/populate.html – robertklep