mongodb基础操作

数据库操作

创建数据库: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修改器和 pullpop修改类似,都是用来删除数组中的元素
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(“索引名称”)删除集合指定索引

创建索引的参数

参数类型描述
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
uniqueBoolean建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDupsBoolean**3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparseBoolean对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSecondsinteger指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
vindex version索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weightsdocument索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值