数据模型关联查询返回数据不完整
使用数据模型进行关联查询时,返回的关联数据只有 _id 字段,其他指定的字段没有返回。本文介绍该问题的原因和正确用法。
数据模型查询
数据模型使用 models.xxx.get(options) 的方式,所有查询条件放在 options 参数中:
// 正确示例:数据模型操作
const { data } = await models.dictData.get({
filter: {
where: {
type_code: { $eq: finalTypeCode }
}
},
select: {
$master: true, // 返回主表所有字段
dict_type: { // 关联表字段
_id: true,
code: true,
name: true,
},
},
orderBy: [
{ sort: 'asc' },
{ createdAt: 'desc' }
],
});
集合操作查询
如果使用文档型数据库的集合操作,需要使用 lookup 进行关联查询:
// 集合操作的关联查询
const result = await db.collection('dictData')
.aggregate()
.lookup({
from: 'dictType',
localField: 'type_code',
foreignField: 'code',
as: 'dict_type'
})
.end();
两种方式对比
| 特性 | 数据模型 | 集合操作 |
|---|---|---|
| API 风格 | models.xxx.get(options) | db.collection('xxx').where().get() |
| 关联查询 | 内置支持,通过 select 指定 | 需要使用 lookup 聚合操作 |
| 类型支持 | 有类型定义 | 无类型定义 |
相似问题
- 数据模型查询关联数据为什么只返回 _id?
- 如何正确使用数据模型的关联查询?
- 数据模型和集合操作有什么区别?
- models.get 和 collection.get 的区别是什么?
- 数据模型查询如何指定返回字段?
- 关联查询返回数据不完整怎么解决?
- 数据模型的 select 参数如何使用?
- 如何在数据模型中进行多表关联查询?