使用mongodb聚合框架填充字段
我试图使用mongoDB的聚合框架在nodejs/mongoose项目中构建查询,但我无法让使用mongodb聚合框架填充字段,mongodb,Mongodb,我试图使用mongoDB的聚合框架在nodejs/mongoose项目中构建查询,但我无法让$lookup工作 我有两个集合,一个项目模式: const projectSchema = new Schema({ ... contact: { type: Schema.Types.ObjectId, ref: 'Contact', required: true, }, ... export default mongoose.model('Project',
$lookup
工作
我有两个集合,一个项目模式:
const projectSchema = new Schema({
...
contact: {
type: Schema.Types.ObjectId,
ref: 'Contact',
required: true,
},
...
export default mongoose.model('Project', projectSchema);
const contactSchema = new Schema({
...
some fields
...
export default mongoose.model('Contact', contactSchema);
和联系人模式:
const projectSchema = new Schema({
...
contact: {
type: Schema.Types.ObjectId,
ref: 'Contact',
required: true,
},
...
export default mongoose.model('Project', projectSchema);
const contactSchema = new Schema({
...
some fields
...
export default mongoose.model('Contact', contactSchema);
在project.contact
中,我存储联系人文档的\u id
。
执行此操作时,我可以使用联系人数据填充项目,例如:
Project.find().populate('contact')
但是,当我使用如下聚合构建查询时,我只得到一个空数组,用于contactData
:
const history = await Project.aggregate([
{
$lookup: {
from: 'Contact',
localField: 'contact',
foreignField: '_id',
as: 'contactData',
},
},
]);
我希望能够访问整个联系人文档以进行进一步处理,但不希望将整个联系人文档存储在项目集合中
这不应该起作用吗,或者我在这里遗漏了什么…?
来自:“联系人”,
@AlexBlex:我以前试过,但没有运气。中的值是联系人集合的名称,而不是型号名称。它应该是联系人
。因此,您可以从“联系人”中尝试,看看它是否有用。@Veeram:没错,它必须是集合的名称,而不是模型的名称!所以是联系人
。谢谢你!