两个集合的聚合数组 mongodb
Posted
技术标签:
【中文标题】两个集合的聚合数组 mongodb【英文标题】:aggregate array of two collections mongodb 【发布时间】: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
阶段返回的内容
【参考方案1】:
需要在ObjectId中进行转换,
var mongoose = require('mongoose');
Clinicas.aggregate([
$unwind: "$medico" ,
$lookup:
from: "medicos",
localField: "medicoId._id",
foreignField: "_id",
as: 'nome'
,
$match: "medicoId._id": mongoose.Types.ObjectId('5df16e5746783116709f09b7') ,
])
【讨论】:
以上是关于两个集合的聚合数组 mongodb的主要内容,如果未能解决你的问题,请参考以下文章