Mongodb基本操作
- 连接数据库
- 创建数据库
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
要插入数据之后show dbs 才会显示数据库,即插入
- 删除数据库
MongoDB 删除数据库的语法格式如下:
db.dropDatabase()
为数据库创建一个用户
> use test
switched to db test
> db.createUser({user:"testuser",pwd:"testpass",roles:["readWrite"]})
Successfully added user: { "user" : "testuser", "roles" : [ "readWrite" ] }
> db.auth("testuser","testpass")
1
首先保证你已经以用户管理员的身份登录 admin 数据库。然后用 use 命令切换到目标数据库,同样用 db.createUser() 命令来创建用户,其中角色名为 “readWrite”。
普通的数据库用户角色有两种,read 和 readWrite。顾名思义,前者只能读取数据不能修改,后者可以读取和修改。
- 创建集合
语法:db.createCollection(name, options)
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。例如:db.test.insert({"test":"123"})
- 删除集合
语法:db.collection.drop()
- 插入文档
文档的数据结构和JSON基本一样。
所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document)
或者
将数据定义成一个变量
- 更新文档
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。
- update() 方法
语法:
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 :可选,抛出异常的级别。
2.save() 方法
语法:
db.collection.save( <document>, { writeConcern: <document> } )
参数说明:
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
通过ObjectId修改,如果save里面没有之前文档的节点,那么这些其他节点会消失。
- 删除文档
MongoDB remove()函数是用来移除集合中的数据。
MongoDB数据更新可以使用update()函数。在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
remove()语法:
db.collection.remove( <query>, <justOne> )
MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
由此可见默认删除了两条数据,如果只想删除一条,即
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
如果你想删除所有数据
db.COLLECTION_NAME.remove({})
- 查询文档
语法:db.COLLECTION_NAME.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.COLLECTION_NAME.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
显示指定列
db.collection.find(query, {name: 1, age: 1}) // inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {name: 0, age: 0}) // exclusion模式 指定不返回的键,返回其他键
将_id:0加入,即可隐藏_id
- MongoDB 与 RDBMS Where 语句比较
等于 |
{<key>:<value>} |
db.col.find({"by":"abc"}).pretty() |
where by = 'abc' |
小于 |
{<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 |
{<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 |
{<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 |
{<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 |
{<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
- MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:db.COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()
- MongoDB OR 条件
db.COLLECTION_NAME.find({$or: [ {key1: value1}, {key2:value2} ] } ).pretty()
- AND 和 OR 联合使用
- MongoDB $type 操作符
类型 |
数字 |
备注 |
Double |
1 |
|
String |
2 |
|
Object |
3 |
|
Array |
4 |
|
Binary data |
5 |
|
Undefined |
6 |
已废弃。 |
Object id |
7 |
|
Boolean |
8 |
|
Date |
9 |
|
Null |
10 |
|
Regular Expression |
11 |
|
JavaScript |
13 |
|
Symbol |
14 |
|
JavaScript (with scope) |
15 |
|
32-bit integer |
16 |
|
Timestamp |
17 |
|
64-bit integer |
18 |
|
Min key |
255 |
Query with -1. |
Max key |
127 |
|
查询'age'列中value类型为Double的数据
查询'age'列中value类型为String的数据
- MongoDB Limit() 方法
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER)
- MongoDB Skip() 方法
我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
选择跳过第一条,得到第二条数据
- MongoDB 排序sort()方法
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
语法:db.COLLECTION_NAME.find().sort({KEY:1})
注:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
- MongoDB 索引
ensureIndex() 方法
MongoDB使用 ensureIndex() 方法来创建索引。
语法:db.COLLECTION_NAME.ensureIndex({KEY:1})
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
- MongoDB 聚合
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
语法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
统计age相同的数据的求和
聚合函数:
$sum |
计算总和。 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg |
计算平均值 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min |
获取集合中所有文档对应值得最小值。 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max |
获取集合中所有文档对应值得最大值。 |
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push |
在结果文档中插入值到一个数组中。 |
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet |
在结果文档中插入值到一个数组中,但不创建副本。 |
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first |
根据资源文档的排序获取第一个文档数据。 |
db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last |
根据资源文档的排序获取最后一个文档数据 |
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
- 建立唯一索引
语法:db.COLLECTION_NAME.ensureIndex({"xxx":1},{"unique":true})
原文地址 https://blog.csdn.net/qq_37421862/article/details/81286063