1、安装

准备工作:下载安装包以及shell控制台

下载地址:阿里云无法分享压缩包,故采用百度网盘分享。

链接: https://pan.baidu/s/1NL344FotGNaZbDFpUoCxWw?pwd=a9h4 提取码: a9h4 

1.在D盘下创建MongoDB文件夹

2.把安装包解压到MongoDB目录下

3.在mongodb-win32-x86_64-windows-6.0.1目录下创建data,logs文件夹

4.logs文件夹下创建mongodb.log

5.启动数据库

cmd进去到bin目录下

D:\APP\GREEN-SOFT\MongoDB\mongodb-windows-x86_64-6.0.1\bin> mongod.exe --dbpath D:\APP\GREEN-SOFT\MongoDB\mongodb-windows-x86_64-6.0.1\data --logpath D:\APP\GREEN-SOFT\MongoDB\mongodb-windows-x86_64-6.0.1\logs\mongodb.log

--dbpath后面跟随的是步骤3中创建的data文件的路径

--logpath后面跟随的是步骤4中创建的mongodb.log文件的路径

6.进入shell控制台

进入mongosh-1.6.0-win32-x64的bin目录下,通过cmd命令直接启动mongosh.exe

 2、数据库的常用操作指令

使用指令前,需要了解MongoDB的一些专业术语

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

2.1 创建数据库

1、创建数据库

use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。

2、 删除数据库

db.dropDatabase()

 3、查看所有数据库的命令

show  dbs

 由于刚刚创建的lx数据库里面没有数据,所以不会显示在列表中

2.2 创建集合

1、创建集合

db.createCollection(name, options)

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项

options可选参数如下

字段类型描述

capped

布尔

(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。

autoIndexId

布尔

3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。

size

数值

(可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。

max

数值

(可选)指定固定集合中包含文档的最大数量。

2、查看已有的集合

show collections 

show tables

3、删除集合

db.collection.drop()

collection是要删除的集合的名称

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。例如

> db.collection.insert({"name" : "helloword高级工程师"})
> show collections
collection(自动创建集合的名称)
...

2.3 插入文档

1、插入文档

db.COLLECTION_NAME.insert(document)

db.COLLECTION_NAME.save(document)

在新版本中建议使用:
db.collection.insertOne() 
db.collection.insertMany()

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany(
  [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

参数说明:

  • document:要写入的文档。

  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。

  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

2.4 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。在新版本中,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 :可选,抛出异常的级别。

2.5 删除文档

MongoDB remove() 函数是用来移除集合中的数据。remove() 方法的基本语法格式如下所示:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query :(可选)删除的文档的条件。

  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

  • writeConcern :(可选)抛出异常的级别。

2.6 查询文档

1、MongoDB 查询文档使用 find() 方法。MongoDB 查询数据的语法格式如下:

db.collection.find(query, projection)

  • query :可选,使用查询操作符指定查询条件

  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.collection.find().pretty()

2、除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

3、MongoDB 与 RDBMS Where 语句比较

操作格式范例RDBMS中的类似语句

等于

{<key>:<value>}

db.col.find({"by":"菜鸟教程"}).pretty()

where by = '菜鸟教程'

小于

{<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

 4、MongoDB AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。

语法格式如下:

db.collection.find({key1:value1, key2:value2}).pretty()

5、MongoDB OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

db.collection.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

2.7 条件操作符

MongoDB中条件操作符有:

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte

我们使用的数据库名称为"lx" 我们的集合名称为"collection",以下为我们插入的数据。

为了方便测试,我们可以先使用以下命令清空集合 "col" 的数据:

db.collection.remove({})

1、插入以下三条数据

db.collection.insert({title: 'Java 教程', 
    description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
    by: 'Helloworld高级工程师',
    url: 'http://www.runoob',
    tags: ['java'],
    likes: 150
})

db.collection.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'Helloworld高级工程师',
    url: 'http://www.runoob',
    tags: ['mongodb'],
    likes: 100
})

db.collection.insert({
    title: 'PHP 教程', 
    description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
    by: 'Helloworld高级工程师',
    url: 'http://www.runoob',
    tags: ['php'],
    likes: 200
})

2、MongoDB (>) 大于操作符 - $gt

如果你想获取 "col" 集合中 "likes" 大于 100 的数据,你可以使用以下命令:

db.collection.find({likes:{$gt:100}})

类似于SQL语句:

Select * from col where likes > 100;

输出结果:

3、MongoDB(>=)大于等于操作符 - $gte

如果你想获取"col"集合中 "likes" 大于等于 100 的数据,你可以使用以下命令:

db.collection.find({likes:{$gte:100}})

类似于SQL语句:

Select * from col where likes >=100;

输出结果:

4、MongoDB (<) 小于操作符 - $lt

如果你想获取"col"集合中 "likes" 小于 150 的数据,你可以使用以下命令:

db.collection.find ( { likes : { $lt : 150 } } )

6、MongoDB (<=) 小于等于操作符 - $lte

如果你想获取"col"集合中 "likes" 小于等于 150 的数据,你可以使用以下命令:

db.collection.find ( { likes : { $lte : 150 } } )

7、MongoDB 使用 (<) 和 (>) 查询 - $lt 和 $gt

如果你想获取"col"集合中 "likes" 大于100,小于 200 的数据,你可以使用以下命令:

db.collection.find ( { likes : { $lt : 200 , $gt : 100 } } )

2.8 MongoDB $type 操作符

$type操作符是基于BSON类型(类似于JSON)来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

类型数字备注
Double1
String2
Object3
Array4
Binary data5
Undefined6已废弃。
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1.
Max key127

 如果想获取 "col" 集合中 title 为 String 的数据,你可以使用以下命令:

db.collection.find ( { “ title " : { $type : 2 } } )

或者

db.collection.find( { title : { $type : " string " } } )

其他的$type使用方式同上

2.9 MongoDB Limit与Skip方法

1、MongoDB Limit() 方法

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

limit()方法基本语法如下所示:

db.collection.find().limit(NUMBER)

注:如果没有指定limit()方法中的参数则显示集合中的所有数据。

2、MongoDB Skip() 方法

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

skip() 方法脚本语法格式如下:

db.collection.find().skip(NUMBER)

例如

db.collection.find().skip(2)

这样会跳过前面两条数据,从而输出后面的数据

可以和limit()一起使用,从而输出中间的一段数据

例如

db.collection.find().skip(1).limit(1)

这样在上述插入三条数据的例子中,就会输出中间的一条数据

2.10 排序

MongoDB sort() 方法

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

sort()方法基本语法如下所示:

 db.collection.find().sort( { KEY : 1 } )

2.11 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

1、createIndex() 方法

MongoDB使用 createIndex() 方法来创建索引。

createIndex()方法基本语法格式如下所示:

db.collection.createIndex(keys, options)

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

实例

db.collection.createIndex({"title":1})

createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。

db.col.createIndex( { " title " : 1 , " description " : -1 } )

createIndex() 接收可选参数,可选参数列表如下:

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

实例

在后台创建索引:

db.conllection.createIndex( { title : 1 , by : 1 } , { background : true } )

通过在创建索引时加 background:true 的选项,让创建工作在后台执行

2.12 聚合

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

有点类似 SQL 语句中的 count(*)。

1、aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

aggregate() 方法的基本语法格式如下所示:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

实例

集合中的数据如下:

db.collection.insertMany([
{
   
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'runoob',
   url: 'http://www.runoob',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'runoob',
   url: 'http://www.runoob',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
}
])

通过以上集合计算每个作者所写的文章数,使用aggregate()计算结果如下:

db.collection.aggregate( [ { $group : { _id : " $by_user " , num_tutorial : { $sum : 1 } } } ] )

以上实例类似sql语句:

select by_user, count(*) from collection group by by_user

在上面的例子中,我们通过字段 by_user 字段对数据进行分组,并计算 by_user 字段相同值的总和。

下表展示了一些聚合的表达式:

表达式描述实例
$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"}}}])

更多推荐

MongoDB 6.0.1最新版使用教程