# 查询返回树状结构
# 代码示例
以下语句效果是:查询已启用的菜单,并自动将子菜单合并到父菜单的children字段下
res = await vk.baseDao.selects({
dbName: "opendb-admin-menus",
pageIndex: 1,
pageSize: 500,
whereJson:{
enable: true,
parent_id: _.in([null, ""]),
menu_id: _.exists(true)
},
sortArr: [{ name: "sort", type: "asc" }], // 主节点的排序规则
// 树状结构参数
treeProps: {
id: "menu_id", // 唯一标识字段,默认为 _id
parent_id: "parent_id", // 父级标识字段,默认为 parent_id
children: "children", // 自定义返回的下级字段名,默认为 children
level: 3, // 查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1
limit: 500, // 每一级最大返回的数据。
sortArr: [{ name: "sort", type: "asc" }], // 所有子节点的排序规则
whereJson: {
enable: true
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
注意:
treeProps
内的whereJson
若需要用到or
和and
则
_.or
需写成 $.or
_.and
需写成 $.and
同时不支持流式语法,只支持如下写法。
let selectsRes = await vk.baseDao.selects({
dbName: "opendb-admin-menus",
pageIndex: 1,
pageSize: 500,
whereJson:{
enable: true,
parent_id: _.in([null, ""]),
menu_id: _.exists(true)
},
sortArr: [{ name: "sort", type: "asc" }], // 主节点的排序规则
// 树状结构参数
treeProps: {
id: "menu_id", // 唯一标识字段,默认为 _id
parent_id: "parent_id", // 父级标识字段,默认为 parent_id
children: "children", // 自定义返回的下级字段名,默认为 children
level: 3, // 查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1
limit: 500, // 每一级最大返回的数据。
sortArr: [{ name: "sort", type: "asc" }], // 所有子节点的排序规则
whereJson: $.or([
{
menu_id: _.eq("sys-user-manage")
},
{
menu_id: _.exists(false)
}
])
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
and 和 or 嵌套
let selectsRes = await vk.baseDao.selects({
dbName: "opendb-admin-menus",
pageIndex: 1,
pageSize: 500,
whereJson:{
enable: true,
parent_id: _.in([null, ""]),
menu_id: _.exists(true)
},
sortArr: [{ name: "sort", type: "asc" }], // 主节点的排序规则
// 树状结构参数
treeProps: {
id: "menu_id", // 唯一标识字段,默认为 _id
parent_id: "parent_id", // 父级标识字段,默认为 parent_id
children: "children", // 自定义返回的下级字段名,默认为 children
level: 3, // 查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1
limit: 500, // 每一级最大返回的数据。
sortArr: [{ name: "sort", type: "asc" }], // 所有子节点的排序规则
whereJson: $.and([
{
menu_id: _.eq("sys-user-manage")
},
$.or([
{
menu_id: _.eq("sys-user-manage2")
},
{
menu_id: _.exists(true)
}
])
])
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# treeProps+foreignDB连表
连表时,foreignDB
属性只需写在主表下,无需写在 treeProps
内。(子表会继承主表的 foreignDB
属性)
res = await vk.baseDao.selects({
dbName: "opendb-admin-menus",
pageIndex: 1,
pageSize: 500,
whereJson:{
enable: true,
parent_id: _.in([null, ""]),
menu_id: _.exists(true)
},
sortArr: [{ name: "sort", type: "asc" }], // 主节点的排序规则
// 树状结构参数
treeProps: {
id: "menu_id", // 唯一标识字段,默认为 _id
parent_id: "parent_id", // 父级标识字段,默认为 parent_id
children: "children", // 自定义返回的下级字段名,默认为 children
level: 3, // 查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1
limit: 500, // 每一级最大返回的数据。
sortArr: [{ name: "sort", type: "asc" }], // 所有子节点的排序规则
whereJson: {
enable: true
}
},
// 副表列表
foreignDB: [
{
dbName: "副表表名",
localKey: "主表外键名",
foreignKey: "副表外键名",
as: "副表as字段",
limit: 1
}
]
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
下方的代码效果是查询用户列表,并自动带出用户推广的用户列表(组成树状结构,支持带出多层)
res = await vk.baseDao.selects({
dbName: "uni-id-users",
pageIndex: 1,
pageSize: 1000,
whereJson:{
inviter_uid: _.exists(false),
},
// 树状结构参数
treeProps: {
id: "_id",
parent_id: $.arrayElemAt(['$inviter_uid', 0]),
children: "children",
level: 2,
limit: 1000,
whereJson: {
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 注意:文档中出现的 $ 在云函数若不可用,则可写成 _.$
以下是 _ 和 $ 变量实际代表的含义
var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
1
2
3
2
3