本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!
本文主要是学习mongodb数据库的语法
数据库连接
后端数据库连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
复制代码
- mongodb:// 是固定搭配,
- 后边是可选参数用户名加密码,
- host是要连接服务器的地址,
- portx是指定的端口,默认27017
- database如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
- options是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
例子如:
使用用户名niu,密码root登录localhost的project数据库。
mongodb://niu:root@localhost/project
复制代码
创建数据库
创建数据库
use project2
db
复制代码
效果如下
显示所有数据库
show dbs
复制代码
往project2中插入一条数据
db.project2.insert({"name":"11111"})
show dbs
复制代码
结果如下
删除数据库
db.dropDatabase()
show dbs
复制代码
结果如下,已删除project2数据库
创建集合
use test
db.createCollection("project2")
复制代码
创建了test数据库,test数据库创建了project2集合
删除集合
db.project2.drop()
复制代码
插入文档
db.COLLECTION_NAME.insertOne(document)
db.COLLECTION_NAME.replaceOne(document)
复制代码
参数有三:
- Document要写入的文档。
- writeConcern写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered指定是否按顺序写入,默认 true,按顺序写入。
db.demo1.insertOne({title: 'title',
description: 'description',
arr: ['1', '2', '3'],
})
复制代码
更新文档
MongoDB 使用 update() 和 save() 方法来更新集合中的文档
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
复制代码
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
db.demo1.update({'title':'title'},{$set:{'title':'title-Update'}},{multi:true})
db.demo1.find().pretty()
复制代码
结果如下:
删除文档
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
复制代码
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
db.demo1.remove({'title':'title'},1)
db.demo1.find()
复制代码
从三条数据,删为两条
查询文档
db.collection.find(query, projection)
复制代码
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
db.demo1.find().pretty()
复制代码
and条件查询
db.col.find({key1:value1, key2:value2}).pretty()
复制代码
db.demo1.find({'title':'title3','description':'description'}).pretty()
复制代码
or条件
db.demo1.find({$or:[{"title":"title2"},{"title": "title3"}]}).pretty()
复制代码
条件操作符
先插入三条数据
大于>
db.demo1.find({likes : {$gt : 1}})
复制代码
结果如下
大于等于>=
db.demo1.find({likes : {$gte : 1}})
复制代码
小于<
db.demo1.find({likes : {$lt : 2}})
复制代码
小于等于<=
db.demo1.find({likes : {$lte : 2}})
复制代码
取中间值
db.demo1.find({likes : {$lt :3, $gt : 1}})
复制代码
$type 操作符
查询数据类型
常见的Double,String,Object,Array,Boolean,Date等等
db.demo1.find({"likes" : {$type : 'number'}})
复制代码
Limit与Skip方法
limit查询条数
db.demo1.find().limit(2)
复制代码
skip跳过多少条
db.demo1.find().limit(2).skip(1)
复制代码
排序
1 为升序排列,而 -1 是用于降序排列。
db.demo1.find().sort({likes:1})
复制代码
db.demo1.find().sort({likes:-1})
复制代码
索引
db.collection.createIndex(keys, options)
复制代码
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
db.demo1.createIndex({likes:1})
复制代码
聚合
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
复制代码
db.demo1.aggregate([{$group : {_id : "$tags", num_tutorial : {$sum : 1}}}])
复制代码
计算tags有几个相同的
$sum 计算总和。
表达式 描述 实例
$sum 计算总和。
db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
复制代码
$avg 计算平均值
db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
复制代码
$min 获取集合中所有文档对应值得最小值
db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
复制代码
$max 获取集合中所有文档对应值得最大值。
db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
复制代码
$push 在结果文档中插入值到一个数组中。
db.demo1.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
复制代码
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。
db.demo1.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
复制代码
$first 根据资源文档的排序获取第一个文档数据。
db.demo1.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
复制代码
$last 根据资源文档的排序获取最后一个文档数据
db.demo1.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END