写在前面
作为一款广为应用的 noSql 数据库。还是有必要重新熟悉一遍。
环境及语言
本教程使用环境
- node 版本 14.15.4
- mongo 版本 4.2.8
- mongodb npm版本 4.1.2
安装 mongo
npm install mongo
1. 连接数据库
const { MongoClient } = require('mongodb')
const client = new MongoClient('mongodb://127.0.0.1:27017')
async function connect(){
await client.connect()
console.log('连接成功')
db = client.db('study_test')
}
2. 增
db.collection('user').insertOne({name:'张三'})
db.collection('user').insertMany([{name:'李四'},{name:'王麻子'}])
insertMany 有个参数介绍一下 ordered : 如果是 true,则当执行失败时,不会写入数据库。如果是 false,则当某一条执行失败时,直接写入数据库。也就是说当有大量写入的时候,为了性能优化,可以设置为 false。
3. 删
db.collection('user').deleteOne({name:'张三'})
db.collection('user').deleteMany({age: 18})
4. 改
update 和 replace 的区别是: update可以替换部分字段。 replace会替换所有字段。
db.collection('user').updateOne({name:'张三'}, {gender:'男'})
db.collection('user').updateMany({name:'张三'}, {gender:'男'})
update 有个参数介绍一下 upsert : 如果为true,当要更新的文档不存在时,会新增一条。为 false,则不会。
5. 查询
db.collection('user').findOne({name:'张三'})
db.collection('user').find({}).toArray()
db.collection('user').find({}, {returnKey:true}).toArray()
db.collection('user').find({}).count()
query参数 | 类型 | 解释 |
---|
$eq | any | 是否相等 | $gt | number | 大于 | $gte | number | 大于等于 | $lt $lte | number | 小于/等于 | $in | array | 是否包含 | $ne | any | 是否不相等 | $nin | array | 不包含 | $not | any | 复杂查询不包含 | $exists | bool | 是否包含此字段 | $type | BSONType | 此字段为指定的类型 | $regex | RegExp | 匹配正则 | $options | i/m/x/s | 与 $regex 匹配使用 | $geoIntersects | any | 地理坐标相关,还有 $geoWithin、 $near、 $nearSphere 、 $maxDistance | $all | array | 与 $in 类似,不过需要包含所有内容 | $elemMatch | any | 匹配包含至少一个元素匹配所有指定查询条件的数组字段的文档。 | $size | number | 匹配长度相同的数组字段的文档 |
option参数 | 类型 | 解释 |
---|
limit | number | 限定返回结果的数量 | sort | object | 排序,传入一个对象,键为字段名,值为1/-1/‘asc’/‘desc’ | projection | object | 限定返回结果的字段,键为字段名,值为 1/0 | skip | number | 要跳过的文档数量 | returnKey | bool | 如果为 true ,则只会返回 _id |
|