【MongoDB】2. MongoDB shell常用指令详解
写下mongodb shell常用的几个指令,这写都是shell里的JavaScript脚本指令,并不是java中的指令,不过学先学这些脚本指令背后的思想,其中的道理一通百通,有这些知识后,不论是在java里用 MongoDB Java Driver 还是用spring封装的 mongoTemplate 去操作MongoDB都很简单
-
查看所有数据库
show dbs; show databases;
-
查看当前数据库
因为这些语句使用JavaScript编写的,所以语法和JavaScript一样,你甚至可以在里面写JavaScript的代码哈哈哈哈,算个1+1 输出个helloworld也可以。这个db就相当于是一个对象的引用,db就可以输出他指向的对象db
-
切换\创建数据库
有则切换,无则创建use [DBName]
-
删除数据库
db.dropDatabase()
-
查看集合(表)
在MongoDB中的表称之为集合,下面这两条都能查询当前指定的db中的表(use db后的的那个数据库)show tables; show collections;
-
插入文档(可创建集合)
在MongoDB中集合是由文档组成的,所谓文档,实际上就是一个JSON字符串,而多个文档就构成了集合,所以一个文档类似于关系型数据库中的一条数据,而集合就类似于关系型数据库中的表
writeConcern: 也是可选参数,写入关注,其值为一个文档,用于描述写入优先等级,等以后再细看这个写入关注,还有一些类似的关注比如说readConcern之类的
ordered: 可选参数。如果值为true,则将数组中文档的进行有序插入,如果一个文档发生错误,mongodb将返回,而无需处理数组中的剩余文档。如果false,执行无序插入,如果错误发生在某个文档中,则继续处理数组中的剩余文档。默认为true。
当该命名的集合不存在时,可创建这个命名的集合
一般来说用第一个insert()方法就够了-
插入一个或多个指定文档
db.<collectionName>.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
-
插入一个指定文档
db.<collectionName>.insertOne( <document>, { writeConcern: <document> } )
-
多个文档插入,如果在插入某一个文档的时候出现了错误,那么后面的文档就无法插入,插入的动作就停止了,但前面已经插入了的文档则不受影响。
db.<collectionName>.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: <document>, ordered: <boolean> } )
-
-
创建集合
db.createCollection(collectionName, option); db.<collectionName>.insert(); db.<collectionName>.insertMany({},{},{}...);
db.createColletion()函数中option是可选可不选的
参数option字段字段 类型 描述 capped Boolean 如果为true,则启用封闭的集合,上限时固定大小的集合,在达到最大大小时自动覆盖最旧的条目。如果指定为true还需指定size参数 size 数字 指定上限集合的最大尺寸(以字节为单位),与capped配合使用 max 数字 指定上限集合中允许的最大文档数个数 -
删除集合
db.<collectionName>.drop()
-
删除文档
集合提供了四种方法用于删除文档
query: 这是一个过滤条件,用于规定一个查询规则,筛选出符合该查询条件的所有文档,删除操作将用于经过该查询条件筛选之后的文档,类似于关系新数据库中的where后面的条件,(这个参数在查询、修改等方法里都会出现,是一个很重要的参数)。如果传一个空文档"{}"那么就会删除这个集合中的所有文档,这个方法
justOne: 可选参数,用于确定是否只删除query中查出来的第一个文档,是一个boolean值,默认为false,如果为true则只删除查出来的第一个文档,false则删除所有query查出来的文档
writeConcern: 也是可选参数,写入关注,其值为一个文档,用于描述写入优先等级,等以后再细看这个写入关注,还有一些类似的关注比如说readConcern之类的
collation: 也是一个可选参数,用于指定操作的collation。collation允许用户指定特定于语言的字符串比较规则,例如大小写和重音标记的规则 官方文档在这里可以看一看俺就没看了https://docs.mongodb.com/manual/reference/collation/
collation文档的字段是这样的,具体啥用处我就没深入了,等以后朝花夕拾来看一看{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
- remove()
-
可以带一个查询文档和一个可选的justOne布尔值
db.<collectionName>.remove({query}, <justOne>)
-
可以采用查询文档和可选的删除选项文档
db.<collectionName>.remove( <query>, { justOne: <boolean>, writeConcern: <document>, collation: <document> } )
-
- deleteOne()
db.<collectionName>.deleteOne( <filter>, { writeConcern: <document>, collation: <document> } )
- deleteMany()
db.<collectionName>.deleteMany( <filter>, { writeConcern: <document>, collation: <document> } )
- findOneAndDelete()
该方法用于根据筛选条件和排序排序标准删除单个文档,并返回已删除的文档,其有三个参数
projection: 可选参数,用于选择返回的文档的字段,选择字段必须是文档的子集,如果想反回全部字段,参数可以缺省
sort: 可选参数,指定过滤器匹配后的文档的排序顺序
maxTimeMS: 可选参数,指定操作必须在其中完成的时间限制(毫秒为单位),超出限制将引发错误db.<collectionName>.findOneAndDelete( <filter>, { projection: <document>, sort: <document>, maxTimeMS: <number>, collation: <document> } )
- remove()
-
修改文档
查询方法中的参数字段
< filter >: 这个就不说了,就是写你想要找的键值对
< update >: 用于修改内容的文档,该字段需要注意,如果只是想替代文档中的字段,那么就可以直接用下面这种格式直接替换,这种格式的update会直接修改符合查询条件的所有字段{ <field1>: <newValue1>, <field2>: <newValue2>, ... }
但如果想要在原有的字段上计算等操作,就需要用到修改操作符,我在这篇博客里写了操作修改符"【MongoDB】Update Operators",在findOneAndUpdateOne()这个方法中必须包含修改操作符,否则就会报错
db.person2.findOneAndUpdate( { "name":"Mo" }, { $set:{"name":"ProhetMo"} } )
projection: 属于选项参数(),可选,设置要返回的字段子集,若要返回文档中的所有字段,让该参数缺省。
sort: 属于选项参数(),可选,用于指定上面的筛选过滤器的排序方式,
-1为降序,1为正序,让field1降序排序,field2升序排序{ "field1": -1, "field2": 1, ... }
maxTimeMS: 属于选项参数(),可选。指定该修改操作必须在多少时间内完成。若指定时间内完不成,则会报错
upsert: 也属于选项参数(),可选。用于设置是否在修改的文档不存在,则创建一个新的文档,默认值为false
returnNewDocument: 属于选项参数(),可选。设置返回的文档是更新后的文档还是更新前的文档。默认为false。true: 返回更新后的文档 false: 返回更新前的文档
collation: 之前写了,这里懒得写了
arrayFilters: 属于选项参数(),可选,用于数组参数的筛选过滤,其结构为一个数组,该数组中可以设置如何操作数组参数中的值。使用占位符$[indentifier]来操作,使用方法可以看这个官方帮助文档
writeConcern: 写入关注等级
multi: 是否批量修改,默认为false
MongoDB中集合提供了四种修改文档的方法-
findOneAndUpdateOne()
修改筛选出来的文档中的第一个文档,并且返回文档,可以用参数控制返回修改前的文档还是修改后的文档db.collection.findOneAndUpdate( <filter>, <update>, { projection: <document>, sort: <document>, maxTimeMS: <number>, upsert: <boolean>, returnNewDocument: <boolean>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ] } )
-
update()
修改单个或批量修改文档,justOne默认为false,只修改查询的第一项数据等同与updateOne,改成true那么效果就和updateMany一样db.collection.update( <query>, <update>, { justOne: <boolean>, upsert: <boolean>, multi: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ] } )
-
updateOne()
修改单个文档db.collection.updateOne( <filter>, <update>, { upsert: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ] } )
-
updateMany()
批量修改文档db.collection.updateMany( <filter>, <update>, { upsert: <boolean>, writeConcern: <document>, collation: <document>, arrayFilters: [ <filterdocument1>, ... ] } )
-
-
查询文档
查询find()返回值是一个cursor迭代器,可以遍历他去访问里面的每一个元素,query里面可以配合其他操作符去进行各种查询操作db.collection.find(query, projection)
参考
MongoDB官方帮助文档:https://docs.mongodb.com/manual/