diff --git a/docs/uniCloud/jql.md b/docs/uniCloud/jql.md index 44ffd7b040482cdb706bfca666f511adf59f9605..01369bc64d4fa68f5727c7d8965d9a2c93ffc0a5 100644 --- a/docs/uniCloud/jql.md +++ b/docs/uniCloud/jql.md @@ -2669,9 +2669,9 @@ const res = await db.collection('geo-near').aggregate().geoNear({ ### 查询某字段和另一个表的字段相等的记录@enhanced-in -> 新增于 HBuilderX 3.7.9 +> 新增于 HBuilderX 3.7.12 -用于匹配某字段和另一个表的字段相等的记录,只能在where方法内使用 +用于匹配某字段和另一个表的字段相等的记录,类似sql语句中的in+子查询的写法,只能在where方法内使用。 **示例** @@ -2688,8 +2688,12 @@ const company = [{ // employee表数据 const employee = [{ _id: '1', - register_date: 1678867175366, + register_date: 1671000000000, company_id: '1' +}, { + _id: '1', + register_date: 1672000000000, + company_id: '2' }, { _id: '2', register_date: 1670000000000, @@ -2699,7 +2703,7 @@ const employee = [{ ```js const companyFilter = db.collection('company').where('status == 0').field('_id').getTemp() // 过滤company表,取其中status为0的记录的_id组成过滤数组 -const res = await db.collection('employee').where(`register_date > 1670000000000 && company_id in ${JSON.stringify(companyFilter)}`).get() // 获取用户表的company_id在过滤条件内的记录 +const res = await db.collection('employee').where(`register_date > 1670000000000 && company_id in ${companyFilter}`).get() // 获取用户表的company_id在过滤条件内的记录 ``` 此查询匹配到的数据库记录为 @@ -2707,12 +2711,14 @@ const res = await db.collection('employee').where(`register_date > 1670000000000 ```js [{ _id: '1', - register_date: 1678867175366, + register_date: 1671000000000, company_id: '1' }] ``` -注意in的这种用法底层使用了lookup方法,在数据量很大时效率不高,推荐在使用时尽量在in之外的条件内筛选出尽量小的数据集。上述示例中`register_date > 1670000000000 && company_id in ${JSON.stringify(companyFilter)}`,`register_date > 1670000000000`这部分条件应筛选出尽量小的结果集以便查询能更高效。 +::: warning 注意 +in的这种用法底层使用了lookup方法,在数据量很大时效率不高,推荐在使用时尽量在in之外的条件内筛选出尽量小的数据集。以上述示例中`register_date > 1670000000000 && company_id in ${companyFilter}`查询条件为例,`register_date > 1670000000000`这部分条件应筛选出尽量小的结果集以便查询能更高效。 +::: **使用限制**