云数据库通过query()方法查询对象,并提供了丰富的谓词查询,比如equalTo()、notEqualTo()、in()等。通过单个或者多个链式过滤条件,您可以从存储区查询到满足特定条件的对象,也可以通过排序谓词对查询结果排序,或者通过限定查询返回数量谓词限定查询结果返回的数量。详细的查询条件请参见DatabaseQuery。
应用会直接从云侧存储区服务器查询数据,本地不会缓存数据。
调用查询数据方法,有两种返回方式,返回一个Promise对象或者在参数中传入一个callback对象返回,下面以Promise为例详细说明。
注意事项:
每次的查询操作仅支持查询一个对象类型下的数据。
您可以在无查询条件时,获取一个对象类型中所有的对象;也可以指定单个查询条件,来获取满足该条件的对象。
async queryAll() {
try {
let resultArray = await databaseZone.query(condition);
console.info(`Succeeded in querying , result: ` + JSON.stringify(resultArray));
} catch (err) {
console.error(`Failed to query , Code: ${err.code}, message: ${err.message}`);
}
}async queryOneBook() {
try {
condition.equalTo('bookName', '左传');
let resultArray = await databaseZone.query(condition);
console.info(`Succeeded in querying , result: ` + JSON.stringify(resultArray));
} catch (err) {
console.error(`Failed to query , Code: ${err.code}, message: ${err.message}`);
}
}您可以通过多个链式过滤条件,来获取满足条件的对象。多个链式条件之间默认用“与”运算。
condition.contains('bookName', '数据库')
.greaterThan('price', 20.0)
.and()
.lessThan('price', 50.0);
let resultArray = await databaseZone.query(condition);condition.contains('bookName', '数据库')
.lessThan('price', 20.0)
.or()
.greaterThan('price', 50.0);
let resultArray = await databaseZone.query(condition);condition.contains('bookName', '史记')
.equalTo('author', '司马迁')
.greaterThan('price', 60.0);
let resultArray = await databaseZone.query(condition);condition.contains('bookName', '自传')
.beginGroup()
.equalTo('author', '齐白石')
.or()
.equalTo('author', '司马迁')
.endGroup()
.greaterThan('price', 60.0);
let resultArray = await databaseZone.query(condition);您可以通过orderByAsc()或者orderByDesc()实现对查询结果集中的对象按某个字段进行升序或者降序排列,排序谓词需要在其它查询谓词之后且在限定数据查询数量谓词之前。
condition.lessThan('price', 50.0)
.orderByDesc('price');
let resultArray = await databaseZone.query(condition); 在查询数据时,您可以通过limit()限定查询返回数据的起始位置和数量,实现数据的分页。例如与排序查询谓词组合使用,可以实现获取top-N条数据。
对查询结果中的对象限定查询返回数量时,限定数据查询返回数量谓词在所有其他谓词查询之后。
condition.lessThan('price', 50.0)
.limit(10);
let resultArray = await databaseZone.query(condition);condition.lessThan('price', 50.0)
.orderByDesc('price')
.limit(10, 6);
let resultArray = await databaseZone.query(condition);在查询数据时,可以通过calculateQuery()对查询结果对象中的某个字段进行算术计算并返回计算的结果。
构造查询条件,并调用calculateQuery()方法,查询所有价格小与50.0的书籍,并且计算所有书籍价格的平均值。
async calculateQuery() {
try {
condition.lessThan('price', 50.0);
let resultNum = await databaseZone.calculateQuery(condition, 'price', cloudDatabase.QueryCalculate.AVERAGE);
console.info(`Succeeded in calculateQuerying , result: ` + JSON.stringify(resultNum));
} catch (err) {
console.error(`Failed to calculateQuery , Code: ${err.code}, message: ${err.message}`);
}
}