课程名称:web前端架构师
课程章节:第14周 第六章 nodejs MongoDB 操作
主讲老师:张轩
课程内容: eggjs 调试技巧
查询操作符
比较操作符
mongodb 内置操作符都是以 $ 开头
- (>) 大于 - $gt
- (<) 小于 - $lt
- (>=) 大于等于 - $gte
- (<= ) 小于等于 - $lte
- (===) 等于 - $eq
- (!==) 不等于 - $neq
/格式
{ age: { $gt : 30 } }
例如下面 使用 mongoose 查找年龄大于 22 的用户
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const UserSchema = new Schema({
username: String,
password: String,
date: Date,
createAt: Date,
age: Number
})
const User = mongoose.model('User', UserSchema);
const data = await User.find({
age: {
$gt: 22
}
})
逻辑操作符
逻辑与
直接对象中添加多个条件即可, $and
{ age: { $gte: 30 }, name: 'james' }
格式
{ age: { $gte: 30 }, name: 'james' }
等于
{
$and: [
{ age: { $gte: 30 } },
{ name: 'james' }
]
}
逻辑或
使用 $or
{
$or: [
{ age: { $gte: 30 } },
{ name: 'xiaobao' }
]
}
Element Operators
- $exists: 判断属性是否存在
- $type: 数据类型 所有 types 列表:https://docs.mongodb.com/manual/reference/operator/query/type/#available-types
格式:
{ $exists: true }
{ $type: 'string'}
const data = await User.find({
age: {
$type: 'number'
}
})
Mongodb 整体结果的处理
- $limit 限制条数
- $skip 跳过的条数
利用这个我们可以实现分页功能
router.get('/user', async (ctx) => {
const pagesize = Number(ctx.query.pagesize) || 2
const pagenum = Number(ctx.query.pagenum) || 0
const data = await User.find().limit(pagesize).skip(pagenum * pagesize)
ctx.body = {
data
}
})
sort 可以用来排序
- -1 降序
- 1 升序
const data = await User.find().sort({age: 1})
projection 可以用来指定返回的字段
0 表示不需要
例如屏蔽 password 字段
const data = await User.find({}, {
password: 0
})
下面代码就会得到 name 和 _id 字段,当我们查询时,mongodb 默认会把 _id 字段给带上
const data = await User.find({}, {
name: 1
})