mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整个。如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段。
MongoDB 的find()方法,在 MongoDB查询 文档解释接受第二个可选参数是要检索的字段列表。在MongoDB中,当执行find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值1或0。 1用来显示字段而0是用来隐藏字段。
find()方法具有投影基本语法如下:
>db.COLLECTION_NAME.find({},{KEY:1})
请注意_id字段始终显示在执行find()方法,如果不想这个字段,那么需要将其设置为0
要限制 MongoDB 中的记录,需要使用 limit() 方法。 limit() 方法接受一个数字型的参数,这是要显示的文档数。
limit() 方法的基本语法如下:
>db.COLLECTION_NAME.find().limit(NUMBER)
下面的例子将显示只有2个文档,当执行文档查询。
如果不指定数量 limit() 方法的参数,它会显示从集合中的所有文件。
除了limit() 方法,还有一个方法skip() 也接受数字类型的参数,并使用跳过的文档数。
skip()方法基本语法如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
下面的例子将只显示第二个文档。
请注意,skip()方法的默认值是0
要在 MongoDB 中的文档进行排序,需要使用sort()方法。 sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序。要指定排序顺序1和-1。 1用于升序排列,而-1用于降序。
sort() 方法的基本语法如下:
>db.COLLECTION_NAME.find().sort({KEY:1})
下面的例子将显示按标题降序排序的文件。
请注意,如果不指定排序优先,则sort() 方法将文档显示为升序排列。
索引支持的解析度的查询效率。如果没有索引,MongoDB 必须扫描每一个文档的集合,要选择那些文档相匹配的查询语句。这种扫描的效率非常低,会要求 mongod 做大数据量的处理。
索引是一种特殊的数据结构,存储设置在一个易于遍历形式的数据的一小部分。索引存储一个特定的字段或一组字段的值,在索引中指定的值的字段排列的。
要创建一个索引,需要使用MongoDB 的ensureIndex()方法。
ensureIndex() 方法的基本语法如下:
db.COLLECTION_NAME.ensureIndex({KEY:1})
这里关键是要在其中创建索引,1是按升序排列的字段名称。要创建降序索引,需要使用-1。
可以通过在多个字段上创建索引。
ensureIndex() 方法也可以接受的选项列表(可选),其下面给出的列表:
参数 | 类型 | 描述 |
---|---|---|
background | Boolean | 在后台建立索引,以便建立索引并不能阻止其他数据库活动。指定true建立在后台。默认值是 false. |
unique | Boolean | 创建唯一索引,以便收集不会接受插入索引键或键匹配现有的值存储在索引文档。指定创建唯一索引。默认值是 false. |
name | string | 索引的名称。如果未指定,MongoDB中都生成一个索引名索引字段的名称和排序顺序串联. |
dropDups | Boolean | 创建一个唯一索引的字段,可能有重复。 MongoDB的索引只有第一次出现的一个键,从集合中删除的所有文件包含该键的后续出现的。指定创建唯一索引。默认值是 false. |
sparse | Boolean | 如果为true,指数只引用文档指定的字段。这些索引使用更少的空间,但在某些情况下,特别是各种不同的表现。默认值是 false. |
expireAfterSeconds | integer | 指定一个值,以秒为TTL控制多久MongoDB的文档保留在此集合. |
v | index version | 索引版本号。默认的索引版本取决于mongodb 运行的版本在创建索引时. |
weights | document | 权重是从1到99999范围内的数,表示该字段的意义,相对于其他的索引字段分数. |
default_language | string | 对于文本索引时,决定停止词和词干分析器和标记生成规则列表的语言。默认值是 english. |
language_override | string | 对于文本索引时,指定的名称在文档中包含覆盖默认的语言,语言字段中。默认值是语言。 |
聚合操作过程中的数据记录和计算结果返回。聚合操作分组值从多个文档,并可以执行各种操作,分组数据返回单个结果。在SQL COUNT(*)和group by 相当于MongoDB的聚集。
对于在MongoDB中聚集,应该使用aggregate()方法。
aggregate() 方法的基本语法如下:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
上述使用的情况相当于SQL查询 select age, count(*) from test group by age
在上面的例子中,我们已分组字段 age文档,并在每个的次数age先前的值总和递增。没有聚集表达式列表。
表达式 | 描述 | 实例 |
---|---|---|
$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"}}}]) |
可能的阶段聚合框架如下:
复制是跨多个服务器同步数据的过程中。复制提供了冗余和增加数据可用性与不同的数据库服务器上的数据的多个副本,复制保护数据库从一台服务器上的损失。复制也可以让恢复硬件故障和服务中断。额外的数据副本,可以奉献一??到灾难恢复,报告,或备份。
MongoDB 复制是一个典型的图显示在客户端应用程序总是与主节点和主节点,然后将数据复制到二级节点。
我们将mongod实例转换成独立的副本集。要转换到副本设置遵循以下步骤:
现在启动MongoDB服务器通过指定 --replSet 选项。 --replSet 基本语法如下:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
eg:
mongod --port 27017 --dbpath "D:set upmongodbdata" --replSet rs0
它会启动一个mongod 实例名称rs0 ,端口为27017。启动命令提示符 rs.initiate(),并连接到这个mongod实例。在mongod客户端执行命令rs.initiate()启动一个新的副本集。要检查副本集 的配置执行命令rs.conf()。要检查的状态副本sete执行命令:rs.status()。
将成员添加到副本集,在多台机器上启动mongod 实例。现在开始一个mongod 客户和发出命令 rs.add().
rs.add()命令的基本语法如下:
>rs.add(HOST_NAME:PORT)
eg.
假设mongod实例的名字是mongod1.net它运行端口为27017。这种情况下,到副本集执行的命令rs.add() 在mongod 客户端。
>rs.add("mongod1.net:27017")
>
可以添加mongod实例副本设置,只有当连接到主节点。要检查是否连接至初级或mongo 客户端不执行命令db.isMaster()。
分片存储在多台机器上的数据记录的过程,它是MongoDB的方法来满足数据增长的需求。一台机器上的大小的数据的增加,可能并不足够来存储数据,也不能提供可接受的读取和写入通过。分片解决问题的水平缩放。通过分片,你添加更多的机器支持数据增长的读取和写入操作需求。
复制所有写转到掌握节点
延时敏感的查询还是到主节点
单副本集有12个节点的限制
内存不能足够大,当活动数据集很大
本地磁盘不够大
垂直缩放太贵
下面给出的图显示了在MongoDB中使用分片分片集群。
在上面给出的图中,有三个主要组成部分,这说明如下:
碎片: 碎片被用来存储数据。它们提供了高可用性和数据的一致性。在生产环境中,每个碎片是一个单独的副本集。
配置服务器: 配置服务器集群的元数据存储。该数据包含集群的数据碎片的映射。查询路由器使用这个元数据,操作具体的碎片。在生产环境中,有整整3分片集群配置服务器。
查询路由: 查询路由基本上是Mongos实例,客户端应用程序界面和直接操作相应的碎片。查询路由过程目标操作的碎片,然后将结果返回到客户端。分片集群可以包含多个查询路由来划分客户端请求负载。客户端发送请求到一个查询路由。一般分片集群有许多查询路由。
创建备份MongoDB中的数据库,应该使用mongodump命令。此命令将服务器的所有数据转储到转储目录。有许多可供选择,通过它可以限制的数据量或创建备份您的远程服务器。
mongodump命令的基本语法如下:
>mongodump
启动mongod 服务器。假设服务器上运行 mongod localhost 端口为 27017。现在打开一个命令提示符并进入 MongoDB实例的bin目录,然后键入命令 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 |
恢复备份数据使用MongoDB 的 mongorerstore 命令。此命令将恢复所有的数据从备份目录。
mongorestore命令的基本语法:
>mongorestore
原文:http://www.cnblogs.com/gimin/p/5248213.html