高级查询(分页、排序、比较)
使用 db.collection(<collection_name>)
对象中的 find
方法,您可以进行高级查询操作。高级查询可以很好的进行分页、排序、条件比较等操作,更好的过滤结果。
语法
- collection 需要查询的集合名称
- filter 查询过滤器
- page 页码
- size 每页条目数
- sort 排序(-1 为降序,1 为升序)
js
db.collection(collection).find(filter, page, size, sort)
通过 ID 进行查询
js
function main() {
let filter = { _id: { $in: [db.toObjectID('abc'), db.toObjectID('123')] } }
let result = db.collection('users').find(filter, 1, 10, { age: -1 }) // 查询 users 集合中 ID 为 abc、123 的第1页数据(每页10条),并以 age 降序排序
if (result == null) {
return '查询失败'
}
return '查询成功:' + JSON.stringify(result)
}
通过其它字段进行查询
js
function main() {
let filter = { name: '王华' }
let result = db.collection('users').find(filter, 1, 10, { age: -1 }) // 查询 users 集合中 name 为 王华 的第1页数据(每页10条),并以 age 降序排序
if (result == null) {
return '查询失败'
}
return '查询成功:' + JSON.stringify(result)
}
通过操作符条件查询
条件操作符
操作符 | 说明 |
---|---|
$eq | 等于 |
$ne | 不等于 |
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
$in | 在给定的数组中 |
$nin | 不在给定的数组中 |
$and | 逻辑与 |
$or | 逻辑或 |
$not | 逻辑非 |
$nor | 不匹配任何条件 |
$exists | 判断字段是否存在 |
$regex | 匹配正则表达式 |
$all | 匹配数组中包含所有指定元素的数据 |
$elemMatch | 匹配数组中至少一个元素满足所有指定条件的数据 |
$size | 匹配数组大小 |
$bitsAllSet | 所有指定位都设置为 1 |
$bitsAnySet | 指定位之一设置为 1 |
$bitsAllClear | 所有指定位都清除为 0 |
$bitsAnyClear | 指定位之一清除为 0 |
$text | 执行全文本搜索 |
$year , $month , $dayOfMonth , $hour , $minute , $second , $millisecond | 日期操作符,用于提取日期字段的各个部分。 |
js
function main() {
let filter = { age: { $lt: 18 } }
let result = db.collection('users').find(filter, 1, 10, { age: -1 }) // 查询 users 集合中 age 小于 18 的第1页数据(每页10条),并以 age 降序排序
if (result == null) {
return '查询失败'
}
return '查询成功:' + JSON.stringify(result)
}
查询全部数据(分页查询)
js
function main() {
let filter = {}
let result = db.collection('users').find(filter, 1, 10, { age: -1 }) // 查询 users 集合中的第1页数据(每页10条),并以 age 降序排序
if (result == null) {
return '查询失败'
}
return '查询成功:' + JSON.stringify(result)
}
distinct 查询
使用 distinct
查询可以查询指定字段中不重复的数据。
js
function main() {
let field = 'name'
let filter = {} // 可以指定过滤条件
let result = db.collection('users').distinct(field, filter) // 查询 users 集合中 name 字段不同值的数据
if (result == null) {
return '查询失败'
}
return '查询成功:' + JSON.stringify(result)
}
count 查询
使用 count
查询可以查询指定条件下的数据数量。
js
function main() {
let filter = { age: { $lt: 18 } }
let result = db.collection('users').count(filter) // 查询 users 集合中 age 小于 18 的数据总数
if (result == null) {
return '查询失败'
}
return '查询成功,总数:' + result
}