新普金娱乐网址


【绚兮读古诗】奇之以愕然之意境世界 ——李白《蜀道难》批注赏析

一个意识了宇宙空间规律的文科生

山村不次传 墨攻

  • 九月 26, 2018
  • 地理
  • 没有评论

什么是MongoDB ?

MongoDB 是由C++语言编写的,是一个因分布式文件存储的开源数据库系统。

于大负荷的情事下,添加更多之节点,可以包服务器性能。

MongoDB 旨在为WEB应用提供可扩大的强性能数据存储解决方案。

MongoDB
将数据存储吗一个文档,数据结构由键值(key=>value)对组合。MongoDB
文档类似于 JSON 对象。字段值可以分包其他文档,数组及文档数组。

 

 

首要特色

  • MongoDB的供了一个面向文档存储,操作起来比较简单和爱。
  • 你可以以MongoDB记录被安任何性质的索引
    (如:FirstName=”Ning”,Address=”Beijing”)来落实再快之排序。
  • 若得通过地面或网络创建数量镜像,这使MongoDB有重新胜似的扩展性。
  • 若果负载的加(需要再行多之储存空间和再胜的拍卖能力)
    ,它可分布于电脑网络被的其余节点上随即就是是所谓的分片。
  • Mongo支持添加的询问表达式。查询指令以JSON形式的号,可任意查询文档中内嵌的对象及数组。
  • MongoDb
    用update()命令可以实现替换完成的文档(数据)或者有点名的数据字段
  • Mongodb中之Map/reduce主要是用来针对数码开展批量处理以及聚集操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中保有的笔录,将key与value传给Reduce函数进行拍卖。
  • Map函数和Reduce函数是采取Javascript编写的,并可以经过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中之一个搭功能,可以用于存放大量多少文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接以服务端执行,也足以管函数的概念存储于服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#当多种语言。

 

图片 1

下载安装配置启动连接

官网:https://www.mongodb.com/download-center#community

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    # 下载
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                              # 解压
mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb                    # 将解压包拷贝到指定目录

export PATH=<mongodb-install-directory>/bin:$PATH      #<mongodb-install-directory> 为Mongo的安装路径,如本文的 /usr/local/mongodb 
mkdir -p /data/db      #创建数据库目录(启动指定--dbpath)

庄不次传染    第66磨

安排文件

suoningdeMacBook-Pro:~ suoning$ cat /usr/local/etc/mongod.conf 
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1
  port: 11811
suoningdeMacBook-Pro:~ suoning$

“笃、笃”暗夜中流传两名气敲门声。

启动

$ ./mongod 
$ ./mongod --dbpath=/data/db --rest
# 默认端口为:27017
# MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest
# MongoDB 的 Web 界面访问端口比服务的端口多1000。如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017

     
庄子正在独酌捏,便启程开门。月光下,一个黑衣人也未打话,一闪而称,随手带达了木扉。

连接

$ sudo mongo
$ sudo mongo --port 11811
$ sudo mongo -u root -p pwd 127.0.0.1:11811/test

 

     
庄子定晴一禁闭,此人剑眉星目,黑脸鹰鼻,正是楚国国营林场的好基友,墨者屈科。庄子惊喜,携了他亲手道:“老兄怎么来了?”

有惊无险认证

      屈科笑道:“一言难尽。来来,我带了瓶夜郎国好酒,边喝边聊。”

创办管理员

> 
> use admin
switched to db admin
> db
admin
> db.createUser({user:'suoning',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
Successfully added user: {
    "user" : "suoning",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
> exit
bye

     
二总人口坐定,三盏落肚,屈科道:“我这次是受了巨子的命,到齐国来呈现他,顺道来拘禁而。

修改配置文件

本有别及更多配备:https://docs.mongodb.com/manual/administration/configuration/

suoningdeMacBook-Pro:~ suoning$ cat /usr/local/etc/mongod.conf 
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1
  port: 11811
security:
   authorization: enabled
suoningdeMacBook-Pro:~ suoning$ 

     
现在惠相挑头合纵,六国联军直逼函谷关,秦军吃紧。我墨者以墨子“非攻”为极,向来扶弱抗强,捍卫世界和平,以承诺上帝好生之命运。这次巨子计划集天下墨者,助秦御敌为函谷关之外,以保全全球之均势与和平。我们墨者有极其先进的防卫武器,有极端勇敢的和平卫士,定会贴近住此关。

又开验证

> 
> show dbs
2017-04-25T08:41:50.126+0800 E QUERY    [thread1] Error: listDatabases failed:{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
> 
> use admin
switched to db admin
> db.auth('suoning','123456')
1
> show dbs
admin  0.000GB
local  0.000GB
>

     
巨子这次命我带来上乱胜负予测机来,让他研究下,看看是否可以自及鼓励士气的来意。此起发明属最高机秘,因此自走特别隐秘,礼数不顶,还为兄谅之。”

创办普通用户

> use admin
switched to db admin
> db.auth('suoning','123456')
1
> 
> use mydb
switched to db mydb
> db.createUser({user:'nick',pwd:'123456',roles:[{role:'readWrite',db:'mydb'}]})
Successfully added user: {
    "user" : "nick",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "mydb"
        }
    ]
}
> 
> db.auth('nick','123456')
1
>

     
庄子摇头道:“七国纷争,互相侵凌,无日不战。你们今天救西,明天救东,何时是单了公司?看看您以全球和平,鞋也一去不复返烂了,头发也少了,形容枯槁,瘦成了平鸣闪电。可天下又哪都有了同样日和平?你弄个毛线呀。”

去用户

> db.dropUser("nick")
true

     
屈科道:“我们墨者为天下人利益奋斗,不计个人得失。当年墨子为救宋国,走得下的磨出了血;成功后,也非受相同文赏,只是允许弟子们每人吃了宋国三升高饭而已。

查有有用户

> use admin
switched to db admin
> db.auth('suoning','123456')
1
> db.system.users.find()
{ "_id" : "admin.suoning", "user" : "suoning", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "XXW+MD0TENKSkzk0bM2EGw==", "storedKey" : "iIuv5DpGOksvaFpFOSnAIRSwh+w=", "serverKey" : "ZGA7/Lkjv+RJX3fNANQN9hgBUwY=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "mydb.nick", "user" : "nick", "db" : "mydb", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "j71pQs/OR1eRtRa1IT80+w==", "storedKey" : "5hkHmU+FwdENDgGjV0wIbmTAOrQ=", "serverKey" : "Qs+c0gfGNUpwD/ZKgeOackzwNxI=" } }, "roles" : [ { "role" : "readWrite", "db" : "mydb" } ] }
> 

 

     
不过你说得吗发理,这次巨子也时有发生反思。他私下有与我道,打算放弃墨子只助弱抗强搞防卫的方针,转而因为战止战,帮助秦王,横扫六皇家,一统天下,以告稳定之和平及幸福!

总结:

  • 创办超级管理员要不被权限模式的景象下实施;
  • 一经 MongoDB
    开启了权模式,并且有一个数据库没有其他用户时时,在未说明权限的状下,可以创建一个用户,当继续创造第二个用户时时,会回去错误,若想延续创造用户则要登录;
  • 用户只能以用户所在数据库登录,管理员要经admin认证后才能够管住其他数据库。

 

     
那以凡一个初天新地的净土。君王一切禀承上帝的旨意,一统天下;各阶官吏听命君王,亿万公民听命官吏,全国一盘棋,再无见面生另战争。天下统一文字,统一考虑,统一法律,统一度量衡,统一交通管理,统一方针政策,如此萌生存秩序井然,社会管理无所不至,真正实现了墨子“尚同”的优质。

数据库角色

  1. 内建的角色
  2. 数据库用户角色:read、readWrite;
  3. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  4. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  5. 备份恢复角色:backup、restore;
  6. 怀有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  7. 最佳用户角色:root //
    这里还有几个角色间接或直接提供了系统超级用户的拜会(dbOwner
    、userAdmin、userAdminAnyDatabase)
  8. 里头角色:__system

    角色说明:
    Read:允许用户读取指定数据库
    readWrite:允许用户读写指定数据库
    dbAdmin:允许用户在指定数据库被履行管理函数,如索引创建、删除,查看统计要访问system.profile
    userAdmin:允许用户向system.users集合写入,可以查找指定数据库里创建、删除和保管用户
    clusterAdmin:只于admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
    readAnyDatabase:只以admin数据库中可用,赋予用户拥有数据库的念权限
    readWriteAnyDatabase:只于admin数据库中可用,赋予用户有数据库的朗读写权限
    userAdminAnyDatabase:只以admin数据库中可用,赋予用户所有数据库的userAdmin权限
    dbAdminAnyDatabase:只于admin数据库中可用,赋予用户有数据库的dbAdmin权限。
    root:只当admin数据库中可用。超级账号,超级权限

 

     
我们墨者有极度精彩的铸剑术、冶金术、弓弩、车與、攻城机、守城机、木制无人侦察鸟、战争与测机;秦国生最为漂亮的马、战士。强强联合,定能无往而不胜。太伟大了,我激动得热血沸腾。”

数据类型

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。

 

      庄子呵呵,道:“统一天下就发定点的和平及甜美了么?

库房以及表操作

     
统一的全世界单是只虚名而无实。实际的场面是各公共各国各异的地理山川、历史沿革、生产方式、风俗民意、思维方法、生活习惯。你用同一效框框去学他们,强制他们扛一整齐,必定行不通。这像吃鸟腿定标准,鹤胫太长得切掉一截,鸭脚太缺得补上等同段,愚蠢、残忍使没用。恐怕天下人会经不了,自曾先期倒以起。

创立库与申

> show dbs
admin  0.000GB
local  0.000GB
> 
> use mydb
switched to db mydb
> db
mydb
> 
> db.mydb.insert({"name":"Nick","age":18})
WriteResult({ "nInserted" : 1 })
> 
> show dbs
admin  0.000GB
local  0.000GB
mydb   0.000GB
>
> show tables;
mydb
>

     
再者,如天下之君主不信教你们墨者敬天、节俭、刻苦、博爱那同样模拟,反而是独贪酷狠毒、好大喜功的暴君肿么办?他会晤他虽开疆拓土、攻伐无休;内虽然盘剥百姓、穷奢极欲。人民吃压着去送命送血汗,还无处可逃。倒不如现在还有会因此脚投票,移民至外六国卡!实在逼狠了,百姓造反,还不平等大人流血。

 删除库

> db.dropUser("nick")
true
> 
> db.createUser({user:'nick',pwd:'123456',roles:[{role:'dbAdmin',db:'mydb'}]})
Successfully added user: {
    "user" : "nick",
    "roles" : [
        {
            "role" : "dbAdmin",
            "db" : "mydb"
        }
    ]
}
> 
> db.auth("nick","123456")
1
> 
> use mydb
switched to db mydb
> db
mydb
> 
> show dbs;
admin  0.000GB
local  0.000GB
mydb   0.000GB
>
> db.dropDatabase()
{ "dropped" : "mydb", "ok" : 1 }
> 
> show dbs;
admin  0.000GB
local  0.000GB
> 

      你们图洋图森破!

 删除表

> db;
mydb
> show tables;
mydb
> 
> db.mydb.drop();
true
> show tables;
> 

 

     
你们发明了上帝、真理、规律、机械、车與、称杆、量斗,献给君王,以为可以好于天下人。你们尚未料到一旦暴君得矣世界,你们那些只东东全会被暴君盗去利用。他会见用你们的上帝、真理、规律来验证外暴政的伟光正;他会晤就此你们的教条发明来更有效率地发动侵略、榨取百姓、镇压反抗!

文档操作

     
你们墨者有笃信、有纲领、有集体、纪律严明、人数过多,对君那天国的集权统治自己就是是单庞大的威胁
。所以暴君一得矣全世界,他必定会公布墨者为邪教奸党黑社会,以上帝和老百姓之名义,一举灭了你们!”

行使 insert() 或 save() 方法向聚集中插文档,语法如下:

db.COLLECTION_NAME.insert(document)

创办读写用户:

> db.createUser({user:'ning',pwd:'123456',roles:[{role:'readWrite',db:'mydb'}]})
Successfully added user: {
    "user" : "ning",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "mydb"
        }
    ]
}
> 
> db.auth('ning','123456')
1
>

插数据:

> 
> db.user.insert({'name':'nick','age':18,'girlfriend':['jenny','coco','julia']})
WriteResult({ "nInserted" : 1 })
> 
> show tables
user
>

> 
> vb = ({'sex':'man'});
{ "sex" : "man" }
> db.user.insert(vb);
WriteResult({ "nInserted" : 1 })
>

 插入文档你呢足以利用 db.col.save(document) 命令。如果未借助于定 _id 字段
save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id
的数据。

 

     
屈科听到这里,猛地起身,拨出腰身中短剑,“咚”地等同名,掷于案及,沉声道:“他敢于!若真正来诸如此类暴君,我决然单人独剑,直闯秦宫,一剑刺死他!”

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

db.collection.remove(
   <query>,
   <justOne>
)

# MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

# 参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。

除去数据:

> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 18, "girlfriend" : [ "jenny", "coco", "julia" ] }
{ "_id" : ObjectId("58fef9165b9ea92ab29fbd4c"), "sex" : "man" }
> 
> db.user.remove({'sex':'man'})
WriteResult({ "nRemoved" : 1 })
> 
> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 18, "girlfriend" : [ "jenny", "coco", "julia" ] }
>

抹第一长条找到的记录可以安装 justOne 为 1:

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

删去所有数据:

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

 

     
庄子一严厉,只见那短剑直钉在案上,铮铮抖动,精亮的剑身映出闪闪烛光,犹如沾满了鲜血。

# 只更新一条
> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 21, "girlfriend" : [ "jenny", "coco", "julia" ] }
{ "_id" : ObjectId("58feffe55b9ea92ab29fbd4d"), "name" : "jenny", "age" : 21 }
> 
> db.user.update({'age':21},{$set:{'age':22}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> 
> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 22, "girlfriend" : [ "jenny", "coco", "julia" ] }
{ "_id" : ObjectId("58feffe55b9ea92ab29fbd4d"), "name" : "jenny", "age" : 21 }
> 

# 更新多条
> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 21, "girlfriend" : [ "jenny", "coco", "julia" ] }
{ "_id" : ObjectId("58feffe55b9ea92ab29fbd4d"), "name" : "jenny", "age" : 21 }
> 
> db.user.update({'age':21},{$set:{'age':22}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> 
> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 22, "girlfriend" : [ "jenny", "coco", "julia" ] }
{ "_id" : ObjectId("58feffe55b9ea92ab29fbd4d"), "name" : "jenny", "age" : 22 }
>

save() 方法通过传播的文档来替换已出文档。语法格式如下:

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

参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别。

> db.user.find()
{ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 22, "girlfriend" : [ "jenny", "coco", "julia" ] }
> 
> db.user.save({ "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"), "name" : "nick", "age" : 18, "girlfriend" : [ "jenny", "julia" ] })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> 
> db.user.find().pretty()
{
    "_id" : ObjectId("58fef7d55b9ea92ab29fbd4b"),
    "name" : "nick",
    "age" : 18,
    "girlfriend" : [
        "jenny",
        "julia"
    ]
}
>

 

      不二评

询问数据的语法格式如下:

db.mydb.find(query, projection)

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

pretty() 方法以格式化的方式来显示所有文档。
>db.mydb.find().pretty()

     
墨子死后,墨分为老三。其一相里氏为巨子的墨派入秦,辅佐秦王。始皇帝一统天下后,墨者们大惑不解。或发学者说,墨者流落为侠。

出乎小于:

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"name":"nick"}).pretty() where name = 'nick'
小于 {<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

取得”col”集合中 “likes” 大于100,小于 200 的数,你得利用以下命令:

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

 and or:

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

Limit、Skip

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

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

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

用skip()方法来越了指定数量之数据,skip方法接受一个数字参数作为跨了之笔录条数,默认为0。

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

 sort

sort()方法对数码进行排序,sort()方法好由此参数指定排序的字段,并行使 1
和 -1 来指定排序的章程,其中 1 为升序排列,而-1凡用来降序排列。

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

操作符 $type

获取 “col” 集合中 title 为 String 的数据:

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

对应匹配类型:

类型 数字 备注
Double 1  
String 2  
Object 3  
Array 4  
Binary data 5  
Undefined 6 已废弃。
Object id 7  
Boolean 8  
Date 9  
Null 10  
Regular Expression 11  
JavaScript 13  
Symbol 14  
JavaScript (with scope) 15  
32-bit integer 16  
Timestamp 17  
64-bit integer 18  
Min key 255 Query with -1.
Max key 127  

 

索引

行使 ensureIndex() 方法来创造索引,语法如下:

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

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

复合索引
db.col.ensureIndex({"title":1,"description":-1})

后台执行
通过在创建索引时加background:true 的选项,让创建工作在后台执行
db.values.ensureIndex({open: 1, close: 1}, {background: true})

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

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

目不克为以下的查询利用:

  • 正则表达式及非操作符,如 $nin, $not, 等。
  • 算术运算符,如 $mod, 等。
  • $where 子句

极特别范围

  • 聚中索引不能够跳64个
  • 搜寻引名的长度不可知超越125只字符 
  • 一个复合索引最多可出31个字段
  • 幸存的索引字段的值超过索引键的界定,MongoDB中无会见创索引。

 

聚合

汇聚(aggregate)主要用以拍卖数据(诸如统计平均值,求与相当),并赶回计算后底多少结果。

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

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 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 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道

MongoDB的集纳管道将MongoDB文档在一个管道处理完毕后拿结果传递给下一个管道处理。管道操作是可以另行的。

表达式:处理输入文档并出口。表达式是无论状态的,只能用来计算时聚集管道的文档,不能够处理外的文档。

  • $project:修改输入文档的布局。可以就此来再次命名、增加或删除域,也可用来创造计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的正统查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在集结管道遭超越了指定数量之文档,并回余下的文档。
  • $unwind:将文档中的某部一个数组类型字段拆分成多漫漫,每条包含数组中的一个价值。
  • $group:将聚集中之文档分组,可用以统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某平地理位置的平稳文档。

管道操作符实例

1、$project实例

db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

2.$match实例

db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

3.$skip实例

db.article.aggregate(
    { $skip : 5 });
经过$skip管道操作符处理后,前五个文档被"过滤"掉。

 

询问分析

explain()

mongo执行计划分析,详细点此处。

> db.user.find({"name":"nick"}).explain();
> db.user.find({"name":"nick"}).explain(true);

首要参数详细:

executionStats.executionSuccess
是否执行成功

executionStats.nReturned
查询的返回条数

executionStats.executionTimeMillis
整体执行时间

executionStats.totalKeysExamined
索引扫描次数

executionStats.totalDocsExamined
document扫描次数

 

hint()

运 hint 来强制 MongoDB 使用一个点名的目录。

这种方式某些情形下会提升性能。 一个生目录的 collection
并且实施一个大抵字段的查询(一些字段已经索引了)。

如下查询指定了使用 naem 和 age 索引字段来查询:
> db.user.find({"name":"nick","age":18}).hint({"name":1,"age":1});

 

 

 

 

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图