# 指定查询字段

默认情况下,读取数据的时候只会返回主模型的字段,例如读取文章数据时,默认只会返回文章的数据。

数据模型支持通过 select 来指定返回的主模型以及关联模型的指定字段。

✅ 建议仅选择需要的字段和关系来减少响应数据的大小并提高查询速度。

# 返回主模型字段

例如,我们在查询单篇文章详情的时候,查询了文章主模型的所有字段,关联字段不会返回,

const { data } = await models.post.get({
  select: {
    $master: true, // 查询主模型所有的字段
  },
  filter: {
    where: {
      _id: {
        $eq: _id, // 推荐传入_id数据标识进行操作
      },
    },
  },
});
// 返回查询到的数据
console.log(data);
// {
//     "owner": "Anonymous(95fblM7nvPi01yQmYxBvBg)",
//     "createdAt": 1717488585078,
//     "createBy": "Anonymous(95fblM7nvPi01yQmYxBvBg)",
//     "updateBy": "Anonymous(95fblM7nvPi01yQmYxBvBg)",
//     "_openid": "95fblM7nvPi01yQmYxBvBg",
//     "_id": "e2764d2d665ecbc9024b058f1d6b33a4",
//     "title": "你好,世界👋",
//     "body": "\"你好世界\"可以翻译成以下几种语言:\n\n英语:Hello World\n西班牙语:Hola Mundo\n法语:Bonjour le Monde\n德语:Hallo Welt\n意大利语:Ciao Mondo\n葡萄牙语:Olá Mundo\n荷兰语:Hallo Wereld\n日语:こんにちは、世界 (Konnichiwa, Sekai)\n韩语:안녕하세요, 세계 (Annyeonghaseyo, Segye)",
//     "slug": "hello-world",
//     "updatedAt": 1717490751944
// }

# 返回指定字段

在查询文章列表的时候,一般情况下我们并不需要查询所有的列表数据,只需要返回必要的字段即可。

const { data } = await models.post.list({
  // 只查询必要的字段
  select: {
    _id: true,
    title: true,
    updatedAt: true,
  },
  filter: {
    where: {},
  },
  getCount: true, // 开启用来获取总数
});

// 返回查询到的数据列表 `records` 和 总数 `total
// 返回的内容明显是经过了数据库的过滤,只返回了_id, title, updatedAt三个字段
console.log(data);
// {
//     "records": [
//         {
//             "_id": "e2764d2d665ecbc9024b058f1d6b33a4",
//             "title": "你好,世界👋",
//             "updatedAt": 1717492882289
//         },
//         {
//             "_id": "e2764d2d665ecbc9024b05905902dab4",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1717488585078
//         },
//         {
//             "_id": "e2764d2d665ecbc9024b058e75abbbeb",
//             "title": "Hola Mundo 👋",
//             "updatedAt": 1717488585078
//         },
//         {
//             "_id": "e2764d2d665ecbc9024b058d064d8a51",
//             "title": "Hello World👋",
//             "updatedAt": 1717488585078
//         },
//         {
//             "_id": "e8da0808665ecba20249254f15c211b0",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1717488546718
//         },
//         {
//             "_id": "e8da0808665ecba20249254e2f20781e",
//             "title": "你好,世界👋",
//             "updatedAt": 1717488546718
//         },
//         {
//             "_id": "e8da0808665ecba20249254d6151ab80",
//             "title": "Hola Mundo 👋",
//             "updatedAt": 1717488546718
//         },
//         {
//             "_id": "e8da0808665ecba20249254c75aa3e64",
//             "title": "Hello World👋",
//             "updatedAt": 1717488546718
//         },
//         {
//             "_id": "57bdf48a665ecb9f004fe19b6398933c",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1717488543827
//         },
//         {
//             "_id": "57bdf48a665ecb9f004fe1997b57f79a",
//             "title": "Hola Mundo 👋",
//             "updatedAt": 1717488543827
//         }
//     ],
//     "total": 51
// }

# 返回关联模型的特定字段

在查询文章列表的时候,我们也可以同时在列表返回这篇文章的评论列表的部分字段

  • 可以在关联字段的 select 中传入对象,来指定返回哪些关联字段, 例如 comments: { _id: true, comment: true }
  • 要返回关联字段中的所有字段,在选择关联字段时,直接传 true,例如 comments: true
const { data } = await models.post.list({
  // 只查询必要的字段
  select: {
    _id: true,
    title: true,
    updatedAt: true,
    comments: {
      _id: true,
      createdAt: true,
      comment: true,
    }, // 也可以直接传 true 返回评论中所有的字段
  },
  filter: {
    where: {},
  },
  getCount: true, // 开启用来获取总数
});

// 返回查询到的数据列表 `records` 和 总数 `total
// 返回的内容明显是经过了数据库的过滤,只返回了_id, title, updatedAt三个字段
console.log(data);
//  {
//     records: [
//       {
//         _id: '9FSAHWM9VV',
//         comments: [
//           {
//             createdAt: 1718096509916,
//             comment: '11',
//             _id: '9FSAJF3GLG',
//           },
//         ],
//         title: 'Bonjour le Monde👋',
//         updatedAt: 1718096503886,
//       },
//       {
//         _id: '9FSAHWM9VU',
//         comments: [],
//         title: '你好,世界👋',
//         updatedAt: 1718096503886,
//       },
//       {
//         _id: '9FSAHWM9VT',
//         comments: [],
//         title: 'Hola Mundo 👋',
//         updatedAt: 1718096503886,
//       },
//       {
//         _id: '9FSAHWM9VS',
//         comments: [],
//         title: 'Hello World👋',
//         updatedAt: 1718096503886,
//       },
//     ],
//   }