本文主要是学习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"}}}])