数据库操作
创建数据库:use < db_name >
展示所有已创建数据库,刚创建的数据库不会显示,需要插入数据后才会展示:show dbs
查看当前数据库:db
删除当前数据库,虽然删除了,但是输入db时还是当前数据库,但是他已经不在数据库列表中了,里面的数据已经清光:db.dropDatabase()
> use keithDB
switched to db keithDB
> show dbs
admin 0.000GB
config 0.000GB
db 0.000GB
local 0.000GB
> db.coffee.insert({name:"拿铁"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
db 0.000GB
keithDB 0.000GB
local 0.000GB
> db
keithDB
> db.dropDatabase()
{ "dropped" : "keithDB", "ok" : 1 }
> db
keithDB
> show dbs
admin 0.000GB
config 0.000GB
db 0.000GB
local 0.000GB
集合操作
创建集合:(1) db.createCollection(< collection_name >,[options]); (2)插入数据的时候,如果集合不存在的话,也会创建集合
创建集合的参数options:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
展示当前所在数据库的所有集合,两种写法都可以:(1)show collections;(2)show tables
删除当前数据库指定集合:db.< collection_name >.drop()
> db.createCollection("coffee",{capped:true,autoIndexId:true,size:2,max:100})
{
"note" : "the autoIndexId option is deprecated and will be removed in a future release",
"ok" : 1
}
> show tables
coffee
> show collections
coffee
> db.coffee.drop()
true
文档操作
增
-
db.< collection_name >.insert(< document >);
-
db.< collection_name >.save(< document >);(可用于新增或者更新)
-
db.< collection_name >.insertOne(< document >,[ {writeConcern: < document >}]);
-
db.< collection_name >.insertMany([< document >,< document >],[ { writeConcern: < document >, ordered: < boolean > }]);
插入的参数解析:
属性 类型 解释 writeConcern 文档 { w: < value >, j: < boolean >, wtimeout: < number > } writeConcern.w 整型 指定写操作传播到的成员数量
w=1(默认):则要求得到写操作已经传播到独立的Mongod实例或副本集的primary成员的确认
w=0:则不要求确认写操作,可能会返回socket exceptions和 networking errors
w=“majority”:要求得到写操作已经传播到大多数具有存储数据具有投票的(data-bearing voting )成员(也就是members[n\].votes
值大于0的成员)的确认writeConcern.j 布朗 要求得到Mongodb的写操作已经写到硬盘日志的确认
j=true:要求得到Mongodb(w指定的实例个数)的写操作已经写到硬盘日志的确认。j=true本身并不保证因为副本集故障而不会回滚。writeConcern.wtimeout 整型 定write concern的时间限制,只适用于w>1的情况
wtimeout在超过指定时间后写操作会返回error,即使写操作最后执行成功,当这些写操作返回时,MongoDB不会撤消在wtimeout时间限制之前执行成功的数据修改。ordered 布朗 指定是否按顺序写入,默认 true,按顺序写入。 > db.coffee.insert({name:"latee"}) WriteResult({ "nInserted" : 1 }) > db.coffee.save({name:"cappuccino"}) WriteResult({ "nInserted" : 1 }) > db.coffee.insertOne({name:"Americano"},{writeConcern:{w:1,j:true,wtimeout:3000}}) { "acknowledged" : true, "insertedId" : ObjectId("5f048866943b40594751c47d") } > db.coffee.insertMany([{name:"Mocca"},{name:"Espresso"}],{writeConcern:{w:1,j:true,wtimeout:3000},ordered:true}) { "acknowledged" : true, "insertedIds" : [ ObjectId("5f04881d943b40594751c47b"), ObjectId("5f04881d943b40594751c47c") ] } > db.coffee.find() { "_id" : ObjectId("5f0485e2943b40594751c477"), "name" : "latee" } { "_id" : ObjectId("5f048610943b40594751c478"), "name" : "cappuccino" } { "_id" : ObjectId("5f048757943b40594751c47a"), "name" : "Americano" } { "_id" : ObjectId("5f04881d943b40594751c47b"), "name" : "Mocca" } { "_id" : ObjectId("5f04881d943b40594751c47c"), "name" : "Espresso" }
### 改
- db.< collection_name >.update( < query >, < update >, { upsert: < boolean >, multi: < boolean >, writeConcern: < document > })
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的修改器(如 s e t , set, set,inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
- db.< collection_name >.save( < document >, { writeConcern: < document > })
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
修改器:
修改器 | 作用 |
---|---|
$set | (1)修改器用来指定一个键值。如果这个键不存在,则创建他,他对更新模式或者用户定义键来说非常方便。 (2)用来修改内嵌文档,内嵌文档字段用“a.b”表示 |
$unset | 修改用于将键删除 |
$inc | 其用来增加或减少已有的键的键值,或者在键不存在的时候创建一个键。 |
$push | 数组修改器,顾名思义它只可以用于操作数组,只能用在值为数组的键上。 p u s h 修 改 器 如 果 指 定 的 值 已 经 存 在 , " push修改器如果指定的值已经存在," push修改器如果指定的值已经存在,"push"会想已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。 |
$ne | 用来操作数组的修改器,在查询文档中,如果一个值不在数组里面就把他加进去,如果在不添加。 |
$addToSet | 用来操作数组的修改器,实现的功能与 n e 修 改 器 相 同 , 且 更 为 方 便 。 使 用 ne修改器相同,且更为方便。使用 ne修改器相同,且更为方便。使用addToSet修改器可以避免重复。 |
$each | 数组修改器要和$addToSet修改结合起来用,可以一次添加多个不同的值。 |
$pop | 修改器主要于从数组中删除元素,他可以从数组中的任何一端删除元素 {KaTeX parse error: Expected 'EOF', got '}' at position 12: pop:{key:1}}̲ 从数组末尾删除一个元素<br…pop:{key:-1}} 从数组头部删除一个元素 |
$pull |
p
u
l
l
修
改
器
和
pull修改器和
pull修改器和pop修改类似,都是用来删除数组中的元素 p u l l 可 以 基 于 特 定 条 件 来 删 除 元 素 < b r / > pull可以基于特定条件来删除元素<br /> pull可以基于特定条件来删除元素<br/>pull会将所有匹配到的数据全部删掉,如对数组[1,2,1,1]执行pull 1,得到的结果就是只有一个元素的数组[2] |
$ | 数组的定位修改器,若是数组有多个值,而我们只想对其中一部分进行操作,有两种方法可以实现这种操作。 两种方法操作数组中的值:通过位置或定位操作符("$")。数组都是以0开头的,可以将下标直接作为键来选择元素。 |
删
- db.< collection_name >.remove( < query >, { justOne: < boolean >, writeConcern: < document > } )
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
查
-
db.< collection_name >.find(query, projection)
可在后面加上.pretty()方法美化查询结果
操作符
操作符 符号 含义 格式 $gt > great than {< key >:{$gt:< value >}} $gte >= great than or equals to {< key >:{$gte:< value >}} = equals to {< key >:< value >} $lte <= less than or equals to {< key >:{$lte:< value >}} $lt < less than {< key >:{$lt:< value >}} $ne != not equals to {< key >:{$ne:< value >}} 模糊查询
格式 对应 /张三/ ‘%张三%’ /^张/ ‘张%’ /三$/ ‘%三’ 展示特定字段
db.user.find({age:{$gt:20}},{name:true,age:true}) 相当于:select name,age from user where age > 20; 字段为true代表展示该字段,false不展示
排序
排序 对应 .sort({age:1}) order by age asc .sort({age:-1}) order by age desc 分页/截取
限制 对应 含义 .limit(5) limit 5 查询前5条数据 .skip(10) 查询后10条数据 .limit(10).skip(5) limit 5,5 查询 5-10之间的数据 统计总数
.count()
条件查询
或查询: db.col.find({$or:[{price:16},{price:18}]}).pretty() 和查询: db.col.find({price:16,name:"latee"}).pretty() 和加或查询: db.col.find({price:16,$or:[{price:16},{price:18}]}).pretty()
索引
命令 | 含义 |
---|---|
db.collection.createIndex(keys, options) | 创建索引 |
db.col.getIndexes() | 查看集合索引 |
db.col.totalIndexSize() | 查看集合索引大小 |
db.col.dropIndexes() | 删除集合所有索引 |
db.col.dropIndex(“索引名称”) | 删除集合指定索引 |
创建索引的参数
参数 | 类型 | 描述 |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | **3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |