跳到主要内容

过滤与排序

数据模型支持通过 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
// },
// ]
// }