查询主要依靠的是get
方法,可以在集合引用与记录引用上调用这个方法。
获取一个记录的数据
需要指定记录的唯一标识,即ID:
db.collection('todos').doc('todo-identifiant-aleatoire').get({
success: function(res) {
console.log(res.data) // res.data 包含该记录的数据
}
})
也可以用 Promise 风格调用:
db.collection('todos').doc('todo-identifiant-aleatoire').get().then(res => {
console.log(res.data) // res.data 包含该记录的数据
})
获取多个记录的数据
即条件获取,通过调用集合上的 where
方法可以指定查询条件,再调用 get
方法即可只返回满足指定查询条件的记录:
db.collection('todos').where({
_openid: 'user-open-id',
done: false
})
.get({
success: function(res) {
console.log(res.data) // res.data 是包含以上定义的两条记录的数组
}
})
值得注意的是,where
方法:
- 接收一个对象参数;
- 该对象中每个字段和相应的值构成一个需满足的匹配条件;
- 各个字段间的关系是 "与" 的关系,即需同时满足这些匹配条件;
- 对于字段,也可以指定匹配一个嵌套字段的值:
style: {
color: 'yellow'
}
或者
'style.color': 'yellow'
获取大量记录的数据
官方表示为了防止误操作以及保护小程序体验,数据库查询单次能够返回的数据量是有限制的:
- 小程序端在获取集合数据时服务器默认一次最多返回 20 条记录;
- 云函数端这个数字则是 100。
开发者可以通过 limit 方法指定需要获取的记录数量,但小程序端不能超过 20 条,云函数端不能超过 100 条。
开发者也可以通过 skip方法 来指定从第几条记录开始读取,如果没有指定 ,则默认从第 0 条记录开始取。显然该方法可以用来多次获取大量记录的数据。
db.collection('todos')
.where({
_openid: 'xxx', // 填入当前用户 openid
})
.skip(10) // 跳过结果集中的前 10 条,从第 11 条开始返回
.limit(10) // 限制返回数量为 10 条
.get()
.then(res => {
console.log(res.data)
})
.catch(err => {
console.error(err)
})
网友评论