【发布时间】:2020-06-13 01:44:12
【问题描述】:
我有两个系列:Clinicas 和 Medicos。 Clinicas 可以有很多 Medicos。这种关系是这样建立的:
medico: [{
medicoId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'medicos'
}
}],
我将有以下 json 结构:
[
{
"nome": "clinica teste",
"medico": [
{
"_id": "5e011a3796a5f80e3c0c8d20",
"medicoId": {
"_id": "5dc5eef455a8f61698a0f2cd",
"nome": "Hancho Crutis",
}
},
{
"_id": "5e011a3796a5f80e3c0c8d1f",
"medicoId": {
"_id": "5df16e5746783116709f09b7",
"nome": "camilinha",
}
}
],
}
]
我想要的是对这些数据进行“连接”。经过长时间的研究,我得到了这个代码,但响应总是空的。有人可以告诉我我做错了什么吗?
Clinicas.aggregate([
{ $unwind: "$medico"},
{ $lookup: {
from: "medicos",
localField: "medicoId._id",
foreignField: "_id",
as: 'nome'
}},
{ $match: {"medicoId._id": "5df16e5746783116709f09b7"}},
])
【问题讨论】:
-
如果你在最后省略了
$match阶段,它会返回任何东西吗? -
返回所有记录
-
听起来好像有一个文档与该 medicoId._id 作为字符串匹配。文档中的该字段是否包含 ObjectId?
-
是的,它确实包含一个 ObjectId
-
@augustofrancisco : 由于您在
medico上设置了$unwind,因此您的 localField 将是localField: "medico.medicoId._id",您需要首先检查nome从lookup阶段返回的内容
标签: node.js mongodb join mongoose aggregation-framework