1、启动mongoDb数据库:

  进入mongoDB的安装目录,执行如下命令

  C:\Program Files\MongoDB\Server\3.0\bin>mongod.exe --dbpath "C:\Program Files\MongoDB\Server\3.0\db"

  启动成功后在打开一个cmd窗口,进入mongoDB的安装目录,执行mongo.exe,默认进入test库

2、use DATABASE_NAME 用于创建数据库。该命令如果数据库不存在,将创建一个新的数据库, 否则将返回现有的数据库。

3、如果想查询数据库列表,那么使用命令 show dbs ;要显示的数据库,需要至少插入一个文档进去。MongoDB的默认数据库是test。 如果没有创建任何数据库,那么集合将被保存在测试数据库。

4、db.dropDatabase() 命令用于删除现有的数据库。

如果想删除新的数据库 <mydb>, 那么 dropDatabase() 命令将如下所示:

>use mydb
switched to db mydb
>db.dropDatabase()
>{ "dropped" : "mydb", "ok" : 1 }
>

5、db.createCollection(name, options) 用于创建集合。 在命令中, name 是要创建集合的名称。 Options 是一个文档,用于指定集合的配置
options:
    字段     类型              描述
  capped     Boolean     (可选)如果为true,它启用上限集合。上限集合是一个固定大小的集合,当它达到其最大尺寸会自动覆盖最老的条目。 如果指定true,则还需要指定参数的大小。
  autoIndexID  Boolean     (可选)如果为true,自动创建索引_id字段。默认的值是 false.
  size       number     (可选)指定的上限集合字节的最大尺寸。如果capped 是true,那么还需要指定这个字段。
  max       number     (可选)指定上限集合允许的最大文件数。

在MongoDB中并不需要创建集合。 当插入一些文档 MongoDB 会自动创建集合。

>db.yiibai.insert({"name" : "yiibai"})
>show collections
mycol
mycollection
system.indexes
yiibai
>

6、删除集合MongoDB 的 db.COLLECTION_NAME.drop() 用于从数据库中删除集合。

下面给出的例子将删除给定名称的集合:mycollection

>use mydb
switched to db mydb
>db.mycollection.drop()
true
>

7、插入文档:db.COLLECTION_NAME.insert(document)

>db.mycol.insert({
_id: ObjectId(7df78ad8902c),
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'yiibai tutorials',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})

这里 mycol 是我们的集合名称,它是在之前的教程中创建。如果集合不存在于数据库中,那么MongoDB创建此集合,然后插入文档进去。

在如果我们不指定_id参数插入的文档,那么 MongoDB 将为文档分配一个唯一的ObjectId。
_id 是12个字节十六进制数在一个集合的每个文档是唯一的。 12个字节被划分如下:
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要以单个查询插入多个文档,可以通过文档 insert() 命令的数组方式。
db.mycol.insert({},{},{},……)

8、查询文档:db.COLLECTION_NAME.find(),find() 方法将在非结构化的方式显示所有的文件。 如果显示结果是格式化的,那么可以用pretty() 方法。
语法

>db.mycol.find().pretty()

除了find()方法还有findOne()方法,仅返回一个文档。

MongoDB的Where条件:
    操作                            语法                                             示例 RDBMS等效语句
    Equality(等于)             {<key>:<value>}                            db.mycol.find({"by":"yiibai tutorials"}).pretty() where by = 'yiibai tutorials'
    Less Than(小于)              {<key>:{$lt:<value>}}                   db.mycol.find({"likes":{$lt:50}}).pretty() where likes < 50
    Less Than Equals(小于等于) {<key>:{$lte:<value>}}                  db.mycol.find({"likes":{$lte:50}}).pretty() where likes <= 50
    Greater Than(大于)            {<key>:{$gt:<value>}}                   db.mycol.find({"likes":{$gt:50}}).pretty() where likes > 50
    Greater Than Equals(大于等于) {<key>:{$gte:<value>}}             db.mycol.find({"likes":{$gte:50}}).pretty() where likes >= 50
    Not Equals(不等于)            {<key>:{$ne:<value>}}                    db.mycol.find({"likes":{$ne:50}}).pretty() where likes != 50

MongoDB的and条件:
在 find()方法,如果您传递多个键通过","将它们分开,那么MongoDB对待它就如AND条件一样。基本语法如下所示:

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

MongoDB的or条件:

要查询基于OR条件的文件,需要使用$or关键字。OR的基本语法如下所示:

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

例子

等效于SQL的where子句:'where likes>10 AND (by = 'yiibai tutorials' OR title = 'MongoDB Overview')'

>db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai tutorials"}, {"title": "MongoDB Overview"}] }).pretty()

9、更新、添加文档

update()方法的基本语法如下

>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)

下面的例子将设置其标题“MongoDB Overview”的文件为新标题为“New MongoDB Tutorial”

>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Tutorial Overview"}
>

默认情况下,MongoDB将只更新单一文件,更新多,需要一个参数 'multi' 设置为 true。

>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},{multi:true})

save() 方法替代或添加文档:>db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})

下面的例子将替换该文件_id '5983548781331adf45ec7'

>db.mycol.save(
{
"_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Yiibai New Topic", "by":"Yiibai Yiibai"
}
)
>db.mycol.find()
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"Yiibai Yiibai New Topic", "by":"Yiibai Yiibai"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Yiibai Overview"}
>

10、删除文档

MongoDB 的 remove()方法用于从集合中删除文档。remove()方法接受两个参数。一个是标准缺失,第二是justOne标志

deletion criteria : 根据文件(可选)删除条件将被删除。

justOne : (可选)如果设置为true或1,然后取出只有一个文档。

下面的例子将删除所有的文件,其标题为 'MongoDB Overview'

>db.mycol.remove({'title':'MongoDB Overview'})

如果有多个记录,并要删除仅第一条记录,然后在 remove()方法设置参数 justOne 。

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

如果没有指定删除条件,则MongoDB将从集合中删除整个文件。这相当于SQL的 truncate 命令。

>db.mycol.remove({})
>db.mycol.find()
>

11、find()部分字段(mongodb投影)

mongodb投影意义是只选择需要的数据,而不是选择整个一个文档的数据。如果一个文档有5个字段,只需要显示3个,只从中选择3个字段。
MongoDB的find()方法,解释了MongoDB中查询文档接收的第二个可选的参数是要检索的字段列表。在MongoDB中,当执行find()方法,那么它会显示一个文档的所有字段。要限制这一点,需要设置字段列表值为1或0。1是用来显示字段,而0被用来隐藏字段。

语法
find()方法的基本语法如下

>db.COLLECTION_NAME.find({},{KEY:1})

12、Limit() 方法显示多少行

要在MongoDB中限制记录,需要使用limit()方法。 limit() 方法接受一个数字类型的参数,这是要显示的文档数量。
语法
limit()方法的基本语法如下

>db.COLLECTION_NAME.find().limit(NUMBER)

还有一个方法 skip()也接受数字类型参数并用于跳过文件数。

语法
skip() 方法的基础语法如下所示:

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

例子:

下面的例子将仅显示第二个文档。
从第二行开始查,只查一条:

>db.mycol.find({},{"title":1,_id:0}).limit(1).skip(1)
{"title":"NoSQL Overview"}
>

请注意,skip() 方法的默认值是 0

13、文档排序(对查询出的数据进行排序)

要排序MongoDB中的文档,需要使用 sort()方法。 sort() 方法接受一个包含字段列表以及排序顺序的文档。 要使用1和-1指定排序顺序。1用于升序,而-1是用于降序。
语法
sort()方法的基本语法如下

>db.COLLECTION_NAME.find().sort({KEY:1})

下面的例子将显示的文件排序按标题降序排序。

>db.mycol.find({},{"title":1,_id:0}).sort({"title":-1})
{"title":"Yiibai Yiibai Overview"}
{"title":"NoSQL Overview"}
{"title":"MongoDB Overview"}
>

请注意,如果不指定排序类型,那么 sort() 方法将以升序排列文档。

14、MongoDB索引
索引支持查询高效率执行。如果没有索引,MongoDB必须扫描集合中的每一个文档,然后选择那些符合查询语句的文档。若需要 mongod 来处理大量数据,扫描是非常低效的。
索引是特殊的数据结构,存储在一个易于设置遍历形式的数据的一小部分。索引存储在索引中指定特定字段的值或一组字段,并排序字段的值。
要创建索引,需要使用MongoDB的ensureIndex()方法。
语法
ensureIndex()方法的基本语法如下

>db.COLLECTION_NAME.ensureIndex({KEY:1})

这里键是要创建索引字段,1是按名称升序排序。若以按降序创建索引,需要使用 -1.

例子:

>db.mycol.ensureIndex({"title":1})
>

在 ensureIndex()方法,可以通过多个字段,来创建多个字段索引。

>db.mycol.ensureIndex({"title":1,"description":-1})

ensureIndex() 方法还接受选项列表(这是可选),其列表如下:

      参数           类型             描述
    background      Boolean          构建索引在后台以便建立索引不阻止其它数据库活动。指定true时建立在后台。缺省值是false.
    unique           Boolean          创建一个唯一的索引,以使集合将不接受插入的的文档,其中的索引关键字或键匹配索引的现有值。指定true以创建唯一索引。缺省值是 false.
    name           string            索引的名称。如果未指定,MongoDB通过连接索引的字段和排序顺序的名称生成一个索引名。
    dropDups                Boolean          创建一个字段唯一索引时可能会有重复。MongoDB索引键仅第一次出现,并从集合中删除包含该键后续出现的所有文档。指定true以创建唯一索引。缺省值是 false.
    sparse                    Boolean          如果为true,索引只引用与指定的字段的文档。这些索引使用更少的空间,但在某些情况下表现不同(特别是排序)。缺省值是 false.
    expireAfterSeconds  integer          指定的值,以秒为单位,作为一个TTL控制MongoDB保留在此集合文件多久。
    v                            index version      索引版本号。默认的索引版本取决于mongod创建索引时运行的版本。
    weights                   document                   重量(weight )是一个数字,它是从1至99,999的数字,表示字段相对于其它索引字段在得分方面的意义。
    default_language     string          对于文本索引,并为词干分析器和标记生成器列表中的语言决定了停用词和规则。它的默认值: english.
    language_override   string          对于一个文本索引,包含在文档中指定字段的名称,语言来覆盖默认语言。它的默认值:language.

15、MongoDB 聚合

聚合操作处理数据记录并返回计算结果。从多个文档聚合分组操作数值,并可以执行多种对分组数据业务返回一个结果。 在SQL中的count(*),使用group by 与mongodb的聚合是等效的。 对于MongoDB的聚合,使用的是aggregate()方法。
语法
aggregate()方法的基本语法如下

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

例子:

在集合中有以下数据:

{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'Yiibai Yiibai ',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId(7df78ad8902d)
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'Yiibai Yiibai',
url: 'http://www.yiibai.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: ObjectId(7df78ad8902e)
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
}

现在从上面的集合,如果想知道每一个用户编写的教程是多少,那么使用aggregate()方法,如下图所示的列表:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
"result" : [
{
"_id" : "Yiibai Yiibai",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1
}
>

用于上述用途将等效于sql查询: select by_user, count(*) from mycol 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      从源文件获取根据分组的头文件。通常,这使得只能意会再加上一些以前应用“$sort” -stage db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
    $last      从源文件获取根据分组的最后文件。通常,这使得只能意会再加上一些以前应用 “$sort”-stage. db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

16、MongoDB创建备份

要使用 mongodump 命令来执行 MongoDB 数据库备份。此命令将转储服务器的所有数据到转储目录。有许多可用的选项,通过它可以限制数据量或创建远程服务器备份。
语法
mongodump命令的基本语法如下

>mongodump
例子
启动 mongod 服务器。假设 mongod 服务器运行在本地主机和端口 27017. 现在打开一个命令提示符,然后转到你的MongoDB实例的bin目录,然后输入命令mongodump。

考虑mycol集合有以下数据。
>mongodump
该命令将连接到服务器127.0.0.1和端口27017,并备份所有数据到服务器上的目录: /bin/dump/.

以上是可用的选项能够与mongodump命令一起使用的列表。

此命令将只备份指定数据库到指定的路径

语法 描述 示例
mongodump --host HOST_NAME --port PORT_NUMBER 这个命令将备份指定的mongod实例的所有数据库 mongodump --host yiibai.com --port 27017
mongodump --dbpath DB_PATH --out BACKUP_DIRECTORY mongodump --dbpath /data/db/ --out /data/backup/
mongodump --collection COLLECTION --db DB_NAME 此命令将仅备份指定的特定数据库集合 mongodump --collection mycol --db test

17、数据恢复

要恢复备份的MongoDB数据,则使用mongorestore命令。该命令将从备份目录恢复所有的数据。
语法
mongorestore命令的基本语法
>mongorestore

MongoDB 知识要点一览的更多相关文章

  1. 十个 MongoDB 使用要点

    转自: 十个 MongoDB 使用要点    从 mongodb 阶段性技术总结 中抽取并整理了对大家有帮助的十个要点:   1.mongodb 表名和字段名统一用小写字母 mongodb 是默认区分 ...

  2. CentOs7下systemd管理知识要点

    centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/system ...

  3. [CISCO] 转载:冲突域与广播域(区别、知识要点)

    [CISCO] 转载:冲突域与广播域(区别.知识要点) 1.传统以太网操作(Ethernet Connection Ethernet) 传统共享式以太网的典型代表是总线型以太网.在这种类型的以太网中, ...

  4. SDR软件无线电知识要点(三)EVM

    SDR软件无线电知识要点(三)EVM 信号质量如何评估 Noise Figure (NF) or sensitivity and Error Vector Magnitude (EVM) provid ...

  5. SDR软件无线电知识要点(一)噪声系数与噪声因子

    SDR软件无线电知识要点(一)噪声系数与噪声因子 信号质量如何评估 Noise Figure (NF) or sensitivity and Error Vector Magnitude (EVM) ...

  6. RIP 知识要点

    RIP知识要点: UDP:520 版本:v1(广播包更新) / v2(组播更新 224.0.0.9  ) 度量值:跳数(最多跳15跳,路由为16跳时路由不可达) =================== ...

  7. javascript必须知道的知识要点(二)

    该文章不详细叙述各知识要点的具体内容,仅把要点列出来,供大家学习的时候参照,或者检测自己是否熟练掌握了javascript,清楚各个部分的内容. 内建对象可划分为数据封装类对象.工具类对象.错误类对象 ...

  8. javascript必须知道的知识要点(一)

    该文章不详细叙述各知识要点的具体内容,仅把要点列出来,供大家学习的时候参照,或者检测自己是否熟练掌握了javascript,清楚各个部分的内容. 语句 注释 输出 字面量 变量 数据类型 typeof ...

  9. Golang 接口与反射知识要点

    目录 Golang 接口与反射知识要点 1. 接口类型变量 2. 类型断言 3. 鸭子类型 4. 反射机制 5. reflect 包 TypeOf().ValueOf() Type().Kind() ...

随机推荐

  1. linux系统limit知识

    1.limit限制每个shell进程和它的子进程对资源的占用.每个登录,还是每个进程? 比如ulimit -n 10240 可以临时改变当前session的shell进程的文件句柄数限制,退出当前窗口 ...

  2. stringbuffer和stringbuilder

    StringBuffer是线程安全的可变字符序列.长度可变,类型任意,最终都要转换为字符串存储.是一个字符串缓冲区,是一个容器.用于临时存储数据.不过StringBuffer缓冲区内部是由数组来存储的 ...

  3. TripleDES加解密Java、C#、php通用代码

    TripleDES说明:     TripleDES(3Des)和Des都是对称加密算法,TripleDes是Des加密算法的增强版本,这里主要说的是TripleDes加密算法的应用.     工作中 ...

  4. C#算法之判断一个字符串是否是对称字符串

    记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...

  5. [转帖]FPGA开发工具汇总

    原帖:http://blog.chinaaet.com/yocan/p/5100017074 ----------------------------------------------------- ...

  6. (int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别

    C#中(int).int.Parse().int.TryParse()和Convert.ToInt32()的区别   原文链接:http://www.cnblogs.com/leolis/p/3968 ...

  7. string、Empty和null三者的区别

    string.Empty和null三者的区别 本文转自  http://www.bitscn.com/pdb/dotnet/201003/181883.html 时间:2010-03-01 00:00 ...

  8. Spring文件上传配置

    增加依赖jar包 <dependency> <groupId>commons-fileupload</groupId> <artifactId>comm ...

  9. CCS3.3下执行优化

    最近想研究一下CCS下的程序优化,之前也了解一些,现在查阅一下资料,整理一下. 当然优化有很多种,我本次先说的是执行优化方式. 首先打开我们自己的工程.工程文件若显示为黄色的,则表示此文件默认优化选项 ...

  10. 详解收发不畅原因及U-Mail邮件中继解决之道

    邮件在商务往来中扮演着信息交流的重要角色,假如传输受阻,必将造成沟通不畅:可能三五封邮件的投递你意识不到其重要性,但假如长期需和客户保持沟 通,则需要保证其一贯的稳定性,这就很考验相关软件平台的性能是 ...