diff --git a/docs/uniCloud/clientdb.md b/docs/uniCloud/clientdb.md
index 6624c97fe8a631c2ac194fd3881882ce33aad7d1..bca478bb37af781b45cdbcd7d6193b54960349b3 100644
--- a/docs/uniCloud/clientdb.md
+++ b/docs/uniCloud/clientdb.md
@@ -1402,6 +1402,75 @@ const res = await db.collection('score')
}
```
+**更复杂一些的用法**
+
+假设`uni-id-users`内有以下数据
+
+```js
+{
+ "_id": "1",
+ "username": "name1",
+ "register_date": 1611367810000 // 2021-01-23 10:10:10
+}
+{
+ "_id": "2",
+ "username": "name2",
+ "register_date": 1611367810000 // 2021-01-23 10:10:10
+}
+{
+ "_id": "3",
+ "username": "name3",
+ "register_date": 1611367810000 // 2021-01-23 10:10:10
+}
+{
+ "_id": "4",
+ "username": "name4",
+ "register_date": 1611281410000 // 2021-01-22 10:10:10
+}
+{
+ "_id": "5",
+ "username": "name5",
+ "register_date": 1611281410000 // 2021-01-22 10:10:10
+}
+{
+ "_id": "6",
+ "username": "name6",
+ "register_date": 1611195010000 // 2021-01-21 10:10:10
+}
+```
+
+以下用法使用add操作符将register_date转化为日期类型,再使用dateToString将add得到的日期格式化为形如`2021-01-21`的字符串,然后根据此字符串进行分组统计,得到每天注册用户量
+
+add操作符的用法为`add(值1,值2)`
+
+dateToString操作符的用法为`dateToString(日期对象,格式化字符串,时区)`
+
+完整操作符列表请参考:[clientDB内可使用的聚合操作符](uniCloud/clientdb.md?id=aggregate-operator)
+
+```js
+const res = await db.collection('uni-id-users')
+.groupBy('dateToString(add(new Date(0),register_date),"%Y-%m-%d","+0800") as date')
+.groupField('count(*) as total')
+.get()
+
+// 返回结果
+
+res = {
+ result: {
+ data: [{
+ date: '2021-01-23',
+ total: 3
+ },{
+ date: '2021-01-22',
+ total: 2
+ },{
+ date: '2021-01-21',
+ total: 1
+ }]
+ }
+}
+```
+
**注意**
- `count(*)`为固定写法,*可以省略
@@ -2277,102 +2346,102 @@ module.exports = {
## 可用聚合操作符列表@aggregate-operator
-为方便书写,clientDB内将聚合操作符的用法进行了简化(相对于云函数内使用聚合操作符而言)。以下是可以在clientDB中使用的聚合操作符
-
-|操作符 |详细文档 |用法 |说明 |
-|--- |--- |--- |--- |
-|abs |[abs](uniCloud/cf-database.md?id=abs) |abs(<表达式>) |- |
-|add |[add](uniCloud/cf-database.md?id=add-1) |add(<表达式1>,<表达式2>) |- |
-|ceil |[ceil](uniCloud/cf-database.md?id=ceil) |ceil(<表达式>) |- |
-|divide |[divide](uniCloud/cf-database.md?id=divide) |divide(<表达式1>,<表达式2>) |- |
-|exp |[exp](uniCloud/cf-database.md?id=exp) |exp(<表达式>) |- |
-|floor |[floor](uniCloud/cf-database.md?id=floor) |floor(<表达式>) |- |
-|ln |[ln](uniCloud/cf-database.md?id=ln) |ln(<表达式>) |- |
-|log |[log](uniCloud/cf-database.md?id=log) |log(<表达式1>,<表达式2>) |- |
-|log10 |[log10](uniCloud/cf-database.md?id=log10) |log10(<表达式>) |- |
-|mod |[mod](uniCloud/cf-database.md?id=mod) |mod(<表达式1>,<表达式2>) |- |
-|multiply |[multiply](uniCloud/cf-database.md?id=multiply) |multiply(<表达式1>,<表达式2>) |- |
-|pow |[pow](uniCloud/cf-database.md?id=pow) |pow(<表达式1>,<表达式2>) |- |
-|sqrt |[sqrt](uniCloud/cf-database.md?id=sqrt) |sqrt(<表达式1>,<表达式2>) |- |
-|subtract |[subtract](uniCloud/cf-database.md?id=subtract) |subtract(<表达式1>,<表达式2>) |- |
-|trunc |[trunc](uniCloud/cf-database.md?id=trunc) |trunc(<表达式>) |- |
-|arrayElemAt |[arrayElemAt](uniCloud/cf-database.md?id=arrayelemat) |arrayElemAt(<表达式1>,<表达式2>) |- |
-|arrayToObject |[arrayToObject](uniCloud/cf-database.md?id=arraytoobject) |arrayToObject(<表达式>) |- |
-|concatArrays |[concatArrays](uniCloud/cf-database.md?id=concatarrays) |concatArrays(<表达式1>,<表达式2>) |- |
-|filter |[filter](uniCloud/cf-database.md?id=filter) |filter(,,) |- |
-|in |[in](uniCloud/cf-database.md?id=in) |in(<表达式1>,<表达式2>) |- |
-|indexOfArray |[indexOfArray](uniCloud/cf-database.md?id=indexofarray) |indexOfArray(<表达式1>,<表达式2>) |- |
-|isArray |[isArray](uniCloud/cf-database.md?id=isarray) |isArray(<表达式>) |- |
-|map |[map](uniCloud/cf-database.md?id=map) |map(,,) |- |
-|objectToArray |[objectToArray](uniCloud/cf-database.md?id=objecttoarray) |objectToArray(<表达式>) |- |
-|range |[range](uniCloud/cf-database.md?id=range) |range(<表达式1>,<表达式2>) |- |
-|reduce |[reduce](uniCloud/cf-database.md?id=reduce) |reduce(,,) |- |
-|reverseArray |[reverseArray](uniCloud/cf-database.md?id=reversearray) |reverseArray(<表达式>) |- |
-|size |[size](uniCloud/cf-database.md?id=size) |size(<表达式>) |- |
-|slice |[slice](uniCloud/cf-database.md?id=slice) |slice(<表达式1>,<表达式2>) |- |
-|zip |[zip](uniCloud/cf-database.md?id=zip) |zip(,,) |- |
-|and |[and](uniCloud/cf-database.md?id=and) |and(<表达式1>,<表达式2>) |- |
-|not |[not](uniCloud/cf-database.md?id=not) |not(<表达式>) |- |
-|or |[or](uniCloud/cf-database.md?id=or) |or(<表达式1>,<表达式2>) |- |
-|cmp |[cmp](uniCloud/cf-database.md?id=cmp) |cmp(<表达式1>,<表达式2>) |- |
-|eq |[eq](uniCloud/cf-database.md?id=eq) |eq(<表达式1>,<表达式2>) |- |
-|gt |[gt](uniCloud/cf-database.md?id=gt) |gt(<表达式1>,<表达式2>) |- |
-|gte |[gte](uniCloud/cf-database.md?id=gte) |gte(<表达式1>,<表达式2>) |- |
-|lt |[lt](uniCloud/cf-database.md?id=lt) |lt(<表达式1>,<表达式2>) |- |
-|lte |[lte](uniCloud/cf-database.md?id=lte) |lte(<表达式1>,<表达式2>) |- |
-|neq |[neq](uniCloud/cf-database.md?id=neq) |neq(<表达式1>,<表达式2>) |- |
-|cond |[cond](uniCloud/cf-database.md?id=cond) |cond(<表达式1>,<表达式2>) |- |
-|ifNull |[ifNull](uniCloud/cf-database.md?id=ifnull) |ifNull(<表达式1>,<表达式2>) |- |
-|switch |[switch](uniCloud/cf-database.md?id=switch) |switch(,) |- |
-|dateFromParts |[dateFromParts](uniCloud/cf-database.md?id=datefromparts) |dateFromParts(,,,,,,,) |- |
-|isoDateFromParts |[isoDateFromParts](uniCloud/cf-database.md?id=isodatefromparts)|isoDateFromParts(,,,,,,,) |云函数内此操作符对应dateFromParts|
-|dateFromString |[dateFromString](uniCloud/cf-database.md?id=datefromstring) |dateFromString(,,,,) |- |
-|dateToString |[dateToString](uniCloud/cf-database.md?id=datetostring) |dateToString(,,,) |- |
-|dayOfMonth |[dayOfMonth](uniCloud/cf-database.md?id=dayofmonth) |dayOfMonth(,) |- |
-|dayOfWeek |[dayOfWeek](uniCloud/cf-database.md?id=dayofweek) |dayOfWeek(,) |- |
-|dayOfYear |[dayOfYear](uniCloud/cf-database.md?id=dayofyear) |dayOfYear(,) |- |
-|hour |[hour](uniCloud/cf-database.md?id=hour) |hour(,) |- |
-|isoDayOfWeek |[isoDayOfWeek](uniCloud/cf-database.md?id=isodayofweek) |isoDayOfWeek(,) |- |
-|isoWeek |[isoWeek](uniCloud/cf-database.md?id=isoweek) |isoWeek(,) |- |
-|isoWeekYear |[isoWeekYear](uniCloud/cf-database.md?id=isoweekyear) |isoWeekYear(,) |- |
-|millisecond |[millisecond](uniCloud/cf-database.md?id=millisecond) |millisecond(,) |- |
-|minute |[minute](uniCloud/cf-database.md?id=minute) |minute(,) |- |
-|month |[month](uniCloud/cf-database.md?id=month) |month(,) |- |
-|second |[second](uniCloud/cf-database.md?id=second) |second(,) |- |
-|week |[week](uniCloud/cf-database.md?id=week) |week(,) |- |
-|year |[year](uniCloud/cf-database.md?id=year) |year(,) |- |
-|literal |[literal](uniCloud/cf-database.md?id=literal) |literal(<表达式>) |- |
-|mergeObjects |[mergeObjects](uniCloud/cf-database.md?id=mergeobjects) |mergeObjects(<表达式1>,<表达式2>) |- |
-|allElementsTrue |[allElementsTrue](uniCloud/cf-database.md?id=allelementstrue) |allElementsTrue(<表达式1>,<表达式2>) |- |
-|anyElementTrue |[anyElementTrue](uniCloud/cf-database.md?id=anyelementtrue) |anyElementTrue(<表达式1>,<表达式2>) |- |
-|setDifference |[setDifference](uniCloud/cf-database.md?id=setdifference) |setDifference(<表达式1>,<表达式2>) |- |
-|setEquals |[setEquals](uniCloud/cf-database.md?id=setequals) |setEquals(<表达式1>,<表达式2>) |- |
-|setIntersection |[setIntersection](uniCloud/cf-database.md?id=setintersection) |setIntersection(<表达式1>,<表达式2>) |- |
-|setIsSubset |[setIsSubset](uniCloud/cf-database.md?id=setissubset) |setIsSubset(<表达式1>,<表达式2>) |- |
-|setUnion |[setUnion](uniCloud/cf-database.md?id=setunion) |setUnion(<表达式1>,<表达式2>) |- |
-|concat |[concat](uniCloud/cf-database.md?id=concat) |concat(<表达式1>,<表达式2>) |- |
-|indexOfBytes |[indexOfBytes](uniCloud/cf-database.md?id=indexofbytes) |indexOfBytes(<表达式1>,<表达式2>) |- |
-|indexOfCP |[indexOfCP](uniCloud/cf-database.md?id=indexofcp) |indexOfCP(<表达式1>,<表达式2>) |- |
-|split |[split](uniCloud/cf-database.md?id=split) |split(<表达式1>,<表达式2>) |- |
-|strLenBytes |[strLenBytes](uniCloud/cf-database.md?id=strlenbytes) |strLenBytes(<表达式>) |- |
-|strLenCP |[strLenCP](uniCloud/cf-database.md?id=strlencp) |strLenCP(<表达式>) |- |
-|strcasecmp |[strcasecmp](uniCloud/cf-database.md?id=strcasecmp) |strcasecmp(<表达式1>,<表达式2>) |- |
-|substr |[substr](uniCloud/cf-database.md?id=substr) |substr(<表达式1>,<表达式2>) |- |
-|substrBytes |[substrBytes](uniCloud/cf-database.md?id=substrbytes) |substrBytes(<表达式1>,<表达式2>) |- |
-|substrCP |[substrCP](uniCloud/cf-database.md?id=substrcp) |substrCP(<表达式1>,<表达式2>) |- |
-|toLower |[toLower](uniCloud/cf-database.md?id=tolower) |toLower(<表达式>) |- |
-|toUpper |[toUpper](uniCloud/cf-database.md?id=toupper) |toUpper(<表达式>) |- |
-|addToSet |[addToSet](uniCloud/cf-database.md?id=addtoset) |addToSet(<表达式>) |- |
-|avg |[avg](uniCloud/cf-database.md?id=avg) |avg(<表达式>) |- |
-|first |[first](uniCloud/cf-database.md?id=first) |first(<表达式>) |- |
-|last |[last](uniCloud/cf-database.md?id=last) |last(<表达式>) |- |
-|max |[max](uniCloud/cf-database.md?id=max) |max(<表达式>) |- |
-|min |[min](uniCloud/cf-database.md?id=min) |min(<表达式>) |- |
-|push |[push](uniCloud/cf-database.md?id=push) |push(<表达式>) |- |
-|stdDevPop |[stdDevPop](uniCloud/cf-database.md?id=stddevpop) |stdDevPop(<表达式>) |- |
-|stdDevSamp |[stdDevSamp](uniCloud/cf-database.md?id=stddevsamp) |stdDevSamp(<表达式>) |- |
-|sum |[sum](uniCloud/cf-database.md?id=sum) |sum(<表达式>) |- |
-|let |[let](uniCloud/cf-database.md?id=let) |let(,) |- |
+为方便书写,clientDB内将聚合操作符的用法进行了简化(相对于云函数内使用聚合操作符而言),主要是参数摊平、。以下是可以在clientDB中使用的聚合操作符
+
+|操作符 |详细文档(云函数内用法) |JQL简化用法 |说明 |
+|--- |--- |--- |--- |
+|abs |[abs](uniCloud/cf-database.md?id=abs) |abs(表达式) |- |
+|add |[add](uniCloud/cf-database.md?id=add-1) |add(表达式1,表达式2) |- |
+|ceil |[ceil](uniCloud/cf-database.md?id=ceil) |ceil(表达式) |- |
+|divide |[divide](uniCloud/cf-database.md?id=divide) |divide(表达式1,表达式2) |- |
+|exp |[exp](uniCloud/cf-database.md?id=exp) |exp(表达式) |- |
+|floor |[floor](uniCloud/cf-database.md?id=floor) |floor(表达式) |- |
+|ln |[ln](uniCloud/cf-database.md?id=ln) |ln(表达式) |- |
+|log |[log](uniCloud/cf-database.md?id=log) |log(表达式1,表达式2) |- |
+|log10 |[log10](uniCloud/cf-database.md?id=log10) |log10(表达式) |- |
+|mod |[mod](uniCloud/cf-database.md?id=mod) |mod(表达式1,表达式2) |- |
+|multiply |[multiply](uniCloud/cf-database.md?id=multiply) |multiply(表达式1,表达式2) |- |
+|pow |[pow](uniCloud/cf-database.md?id=pow) |pow(表达式1,表达式2) |- |
+|sqrt |[sqrt](uniCloud/cf-database.md?id=sqrt) |sqrt(表达式1,表达式2) |- |
+|subtract |[subtract](uniCloud/cf-database.md?id=subtract) |subtract(表达式1,表达式2) |- |
+|trunc |[trunc](uniCloud/cf-database.md?id=trunc) |trunc(表达式) |- |
+|arrayElemAt |[arrayElemAt](uniCloud/cf-database.md?id=arrayelemat) |arrayElemAt(表达式1,表达式2) |- |
+|arrayToObject |[arrayToObject](uniCloud/cf-database.md?id=arraytoobject) |arrayToObject(表达式) |- |
+|concatArrays |[concatArrays](uniCloud/cf-database.md?id=concatarrays) |concatArrays(表达式1,表达式2) |- |
+|filter |[filter](uniCloud/cf-database.md?id=filter) |filter(input,as,cond) |- |
+|in |[in](uniCloud/cf-database.md?id=in) |in(表达式1,表达式2) |- |
+|indexOfArray |[indexOfArray](uniCloud/cf-database.md?id=indexofarray) |indexOfArray(表达式1,表达式2) |- |
+|isArray |[isArray](uniCloud/cf-database.md?id=isarray) |isArray(表达式) |- |
+|map |[map](uniCloud/cf-database.md?id=map) |map(input,as,in) |- |
+|objectToArray |[objectToArray](uniCloud/cf-database.md?id=objecttoarray) |objectToArray(表达式) |- |
+|range |[range](uniCloud/cf-database.md?id=range) |range(表达式1,表达式2) |- |
+|reduce |[reduce](uniCloud/cf-database.md?id=reduce) |reduce(input,initialValue,in) |- |
+|reverseArray |[reverseArray](uniCloud/cf-database.md?id=reversearray) |reverseArray(表达式) |- |
+|size |[size](uniCloud/cf-database.md?id=size) |size(表达式) |- |
+|slice |[slice](uniCloud/cf-database.md?id=slice) |slice(表达式1,表达式2) |- |
+|zip |[zip](uniCloud/cf-database.md?id=zip) |zip(inputs,useLongestLength,defaults) |- |
+|and |[and](uniCloud/cf-database.md?id=and) |and(表达式1,表达式2) |- |
+|not |[not](uniCloud/cf-database.md?id=not) |not(表达式) |- |
+|or |[or](uniCloud/cf-database.md?id=or) |or(表达式1,表达式2) |- |
+|cmp |[cmp](uniCloud/cf-database.md?id=cmp) |cmp(表达式1,表达式2) |- |
+|eq |[eq](uniCloud/cf-database.md?id=eq) |eq(表达式1,表达式2) |- |
+|gt |[gt](uniCloud/cf-database.md?id=gt) |gt(表达式1,表达式2) |- |
+|gte |[gte](uniCloud/cf-database.md?id=gte) |gte(表达式1,表达式2) |- |
+|lt |[lt](uniCloud/cf-database.md?id=lt) |lt(表达式1,表达式2) |- |
+|lte |[lte](uniCloud/cf-database.md?id=lte) |lte(表达式1,表达式2) |- |
+|neq |[neq](uniCloud/cf-database.md?id=neq) |neq(表达式1,表达式2) |- |
+|cond |[cond](uniCloud/cf-database.md?id=cond) |cond(表达式1,表达式2) |- |
+|ifNull |[ifNull](uniCloud/cf-database.md?id=ifnull) |ifNull(表达式1,表达式2) |- |
+|switch |[switch](uniCloud/cf-database.md?id=switch) |switch(branches,default) |- |
+|dateFromParts |[dateFromParts](uniCloud/cf-database.md?id=datefromparts) |dateFromParts(year,month,day,hour,minute,second,millisecond,timezone) |- |
+|isoDateFromParts |[isoDateFromParts](uniCloud/cf-database.md?id=isodatefromparts)|isoDateFromParts(isoWeekYear,isoWeek,isoDayOfWeek,hour,minute,second,millisecond,timezone) |云函数内此操作符对应dateFromParts|
+|dateFromString |[dateFromString](uniCloud/cf-database.md?id=datefromstring) |dateFromString(dateString,format,timezone,onError,onNull) |- |
+|dateToString |[dateToString](uniCloud/cf-database.md?id=datetostring) |dateToString(date,format,timezone,onNull) |- |
+|dayOfMonth |[dayOfMonth](uniCloud/cf-database.md?id=dayofmonth) |dayOfMonth(date,timezone) |- |
+|dayOfWeek |[dayOfWeek](uniCloud/cf-database.md?id=dayofweek) |dayOfWeek(date,timezone) |- |
+|dayOfYear |[dayOfYear](uniCloud/cf-database.md?id=dayofyear) |dayOfYear(date,timezone) |- |
+|hour |[hour](uniCloud/cf-database.md?id=hour) |hour(date,timezone) |- |
+|isoDayOfWeek |[isoDayOfWeek](uniCloud/cf-database.md?id=isodayofweek) |isoDayOfWeek(date,timezone) |- |
+|isoWeek |[isoWeek](uniCloud/cf-database.md?id=isoweek) |isoWeek(date,timezone) |- |
+|isoWeekYear |[isoWeekYear](uniCloud/cf-database.md?id=isoweekyear) |isoWeekYear(date,timezone) |- |
+|millisecond |[millisecond](uniCloud/cf-database.md?id=millisecond) |millisecond(date,timezone) |- |
+|minute |[minute](uniCloud/cf-database.md?id=minute) |minute(date,timezone) |- |
+|month |[month](uniCloud/cf-database.md?id=month) |month(date,timezone) |- |
+|second |[second](uniCloud/cf-database.md?id=second) |second(date,timezone) |- |
+|week |[week](uniCloud/cf-database.md?id=week) |week(date,timezone) |- |
+|year |[year](uniCloud/cf-database.md?id=year) |year(date,timezone) |- |
+|literal |[literal](uniCloud/cf-database.md?id=literal) |literal(表达式) |- |
+|mergeObjects |[mergeObjects](uniCloud/cf-database.md?id=mergeobjects) |mergeObjects(表达式1,表达式2) |- |
+|allElementsTrue |[allElementsTrue](uniCloud/cf-database.md?id=allelementstrue) |allElementsTrue(表达式1,表达式2) |- |
+|anyElementTrue |[anyElementTrue](uniCloud/cf-database.md?id=anyelementtrue) |anyElementTrue(表达式1,表达式2) |- |
+|setDifference |[setDifference](uniCloud/cf-database.md?id=setdifference) |setDifference(表达式1,表达式2) |- |
+|setEquals |[setEquals](uniCloud/cf-database.md?id=setequals) |setEquals(表达式1,表达式2) |- |
+|setIntersection |[setIntersection](uniCloud/cf-database.md?id=setintersection) |setIntersection(表达式1,表达式2) |- |
+|setIsSubset |[setIsSubset](uniCloud/cf-database.md?id=setissubset) |setIsSubset(表达式1,表达式2) |- |
+|setUnion |[setUnion](uniCloud/cf-database.md?id=setunion) |setUnion(表达式1,表达式2) |- |
+|concat |[concat](uniCloud/cf-database.md?id=concat) |concat(表达式1,表达式2) |- |
+|indexOfBytes |[indexOfBytes](uniCloud/cf-database.md?id=indexofbytes) |indexOfBytes(表达式1,表达式2) |- |
+|indexOfCP |[indexOfCP](uniCloud/cf-database.md?id=indexofcp) |indexOfCP(表达式1,表达式2) |- |
+|split |[split](uniCloud/cf-database.md?id=split) |split(表达式1,表达式2) |- |
+|strLenBytes |[strLenBytes](uniCloud/cf-database.md?id=strlenbytes) |strLenBytes(表达式) |- |
+|strLenCP |[strLenCP](uniCloud/cf-database.md?id=strlencp) |strLenCP(表达式) |- |
+|strcasecmp |[strcasecmp](uniCloud/cf-database.md?id=strcasecmp) |strcasecmp(表达式1,表达式2) |- |
+|substr |[substr](uniCloud/cf-database.md?id=substr) |substr(表达式1,表达式2) |- |
+|substrBytes |[substrBytes](uniCloud/cf-database.md?id=substrbytes) |substrBytes(表达式1,表达式2) |- |
+|substrCP |[substrCP](uniCloud/cf-database.md?id=substrcp) |substrCP(表达式1,表达式2) |- |
+|toLower |[toLower](uniCloud/cf-database.md?id=tolower) |toLower(表达式) |- |
+|toUpper |[toUpper](uniCloud/cf-database.md?id=toupper) |toUpper(表达式) |- |
+|addToSet |[addToSet](uniCloud/cf-database.md?id=addtoset) |addToSet(表达式) |- |
+|avg |[avg](uniCloud/cf-database.md?id=avg) |avg(表达式) |- |
+|first |[first](uniCloud/cf-database.md?id=first) |first(表达式) |- |
+|last |[last](uniCloud/cf-database.md?id=last) |last(表达式) |- |
+|max |[max](uniCloud/cf-database.md?id=max) |max(表达式) |- |
+|min |[min](uniCloud/cf-database.md?id=min) |min(表达式) |- |
+|push |[push](uniCloud/cf-database.md?id=push) |push(表达式) |- |
+|stdDevPop |[stdDevPop](uniCloud/cf-database.md?id=stddevpop) |stdDevPop(表达式) |- |
+|stdDevSamp |[stdDevSamp](uniCloud/cf-database.md?id=stddevsamp) |stdDevSamp(表达式) |- |
+|sum |[sum](uniCloud/cf-database.md?id=sum) |sum(表达式) |- |
+|let |[let](uniCloud/cf-database.md?id=let) |let(vars,in) |- |
以上操作符还可以组合使用