跳到主要内容

数据模型关联查询返回数据不完整

使用数据模型进行关联查询时,返回的关联数据只有 _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 聚合操作
类型支持有类型定义无类型定义

相似问题

  1. 数据模型查询关联数据为什么只返回 _id?
  2. 如何正确使用数据模型的关联查询?
  3. 数据模型和集合操作有什么区别?
  4. models.get 和 collection.get 的区别是什么?
  5. 数据模型查询如何指定返回字段?
  6. 关联查询返回数据不完整怎么解决?
  7. 数据模型的 select 参数如何使用?
  8. 如何在数据模型中进行多表关联查询?

相关文档