# 过滤与排序

数据模型支持通过 filter 来进行查询过滤,支持通过 orderBy 来进行查询排序

下面的查询语句会进行下列过滤和排序

  • 过滤正文不为空且标题包含“世界”的文章
  • 按照创建时间倒序
const { data } = await models.post.list({
  filter: {
    where: {
      body: {
        $nempty: true,
      },
      title: {
        $search: "世界",
      },
    },
  },
  orderBy: [
    {
      createdAt: "desc", // 创建时间,倒序
    },
  ],
});

console.log(data);
// {
//     "records": [
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263769729,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C0WQN26",
//             "title": "你好,世界👋",
//             "body": "31",
//             "updatedAt": 1718264815088
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263869238,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C9VQBZ4",
//             "title": "你好,世界👋",
//             "body": "222",
//             "updatedAt": 1718264796634
//         }
//     ]
// }

# 过滤 filter

数据模型支持组合多种过滤方式进行查询

# 过滤条件和运算符

请参阅 SDK 参考文档以获取运算符的完整列表

# 组合查询

可以使用逻辑运算符(例如 $and and $or)按条件组合进行过滤。

下面的查询语句会过滤正文字段不存在,或正文字段为空字符串的文章

const { data } = await models.post.list({
  filter: {
    where: {
      $or: [
        {
          body: {
            $empty: true,
          },
        },
        {
          body: {
            $eq: "",
          },
        },
      ],
    },
  },
});
console.log(data);

# 过滤空字段

下面的查询语句会过滤正文字段不存在的文章

const { data } = await models.post.list({
  filter: {
    where: {
      body: {
        $empty: true,
      },
    },
  },
});
console.log(data);

# 过滤非空字段

下面的查询语句会过滤正文字段不为空的文章

const { data } = await models.post.list({
  filter: {
    where: {
      body: {
        $nempty: true,
      },
    },
  },
});
console.log(data);

# 按照关系过滤

下面的查询语句会过滤评论内容不为空的文章,使用了 relateWhere 来进行关联模型的筛选,使用select来选择返回的字段

const { data } = await models.post.list({
  filter: {
    relateWhere: {
      comments: {
        where: {
          comment: {
            $nempty: true,
          },
        },
      },
    },
    where: {},
  },
  select: {
    comments: {
      comment: true,
    },
    $master: true,
  },
});
console.log(data);

// {
//     "records": [
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718267474142,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "11",
//                     "_id": "9G5TTNF8G8"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5MUV3RLC",
//             "title": "",
//             "body": "",
//             "slug": "",
//             "updatedAt": 1718267474142
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263769729,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "",
//                     "_id": "9G5ESK0BP6"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C0WQN26",
//             "title": "你好,世界👋",
//             "body": "31",
//             "updatedAt": 1718264815088
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263769729,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "1",
//                     "_id": "9G5C8CCE1N"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C0WQN27",
//             "title": "Bonjour le Monde👋",
//             "body": "222",
//             "slug": "111",
//             "updatedAt": 1718263858534
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263769729,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "222",
//                     "_id": "9G5C9SB840"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C0WQN25",
//             "title": "Hola Mundo 👋",
//             "updatedAt": 1718263769729
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718100296618,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "11",
//                     "_id": "9FSLL6SU6L"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9FSLKTQHB9",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1718100296618
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718099611319,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "2222",
//                     "_id": "9FSJUCDH2G"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9FSJS16Z1A",
//             "title": "11",
//             "body": "11",
//             "slug": "11",
//             "updatedAt": 1718099611319
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718096503886,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "comments": [
//                 {
//                     "comment": "11",
//                     "_id": "9FSAJF3GLG"
//                 }
//             ],
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9FSAHWM9VV",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1718096503886
//         }
//     ]
// }

# 排序 orderBy

我们也可以构造其他多种排序方式,比如按标题和更新时间进行排序,具体可以参考orderBy 来进行查询排序

const { data } = await models.post.list({
  orderBy: [
    {
      title: "asc", // 先按照标题进行升序排序
    },
    {
      updatedAt: "desc", // 再按更新时间升序排序
    },
  ],
});

console.log(data);

// {
//     "records": [
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718267474142,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5MUV3RLC",
//             "title": "",
//             "body": "",
//             "slug": "",
//             "updatedAt": 1718267474142
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718099611319,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9FSJS16Z1A",
//             "title": "11",
//             "body": "11",
//             "slug": "11",
//             "updatedAt": 1718099611319
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263869238,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C9VQBZ5",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1718263869238
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718263769729,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9G5C0WQN27",
//             "title": "Bonjour le Monde👋",
//             "body": "222",
//             "slug": "111",
//             "updatedAt": 1718263858534
//         },
//         {
//             "owner": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "createdAt": 1718100296618,
//             "createBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "updateBy": "Anonymous(VEVVny3JknjjDtpzzp2AAQ)",
//             "_openid": "VEVVny3JknjjDtpzzp2AAQ",
//             "_id": "9FSLKTQHB9",
//             "title": "Bonjour le Monde👋",
//             "updatedAt": 1718100296618
//         },
//     ]
// }