1、目录目录MongoDB MongoDB 基础基础1MongoDBMongoDB文档文档操作技术基础操作技术基础2MongoDBMongoDB数据库集群架构数据库集群架构3MongoDBMongoDB管理与监控管理与监控4小结小结51MongoDB MongoDB 官网:官网:http:/www.mongodb.org/http:/www.mongodb.org/2目录目录 本章本章MongoDBMongoDB数据库技术学习内容数据库技术学习内容思维导思维导图如下图如下nMongoDBMongoDB官网:官网:http:/http:/www.MongoDB.org/downloadswww.Mo
2、ngoDB.org/downloadsnWin10Win10平台下载:平台下载:MongoDB-win32-x86_64-2008plus-ssl-4.0.6-signed.msiMongoDB-win32-x86_64-2008plus-ssl-4.0.6-signed.msi安装默认路径:安装默认路径:C:Program C:Program FilesMongoDBServer4.0FilesMongoDBServer4.05.1.1下载与安装下载与安装 _id:ObjectId(590d63bd59e819a6ae569a65),address:building:203,coord:-7
3、3.97822040000001,40.6435254,street:Church Avenue,zip code:11218,borough:Brooklyn,cuisine:Ice Cream,Gelato,Yogurt,Ices,grades:date:ISODate(2014-02-10T00:00:00Z),grade:A,score:2,date:ISODate(2013-01-02T00:00:00Z),grade:A,score:13,date:ISODate(2012-01-09T00:00:00Z),grade:A,score:An Introduction to Data
4、base SystemnMongoDBMongoDB安装完毕后,可查看系统的服务安装完毕后,可查看系统的服务列表列表n将安装路径将安装路径binbin目录添加到系统环境变量目录添加到系统环境变量PathPath后,可在命令行窗后,可在命令行窗口中执行以下命令进一步验证是否安装成功,口中执行以下命令进一步验证是否安装成功,MongoDBMongoDB数据库数据库服务默认端口号为服务默认端口号为2701727017,将进入,将进入MongoDB ShellMongoDB Shell环境环境 mongo mongo 或者或者 mongo-host 127.0.0.1:27017 mongo-host
5、 127.0.0.1:270175.1.1下载与安装下载与安装 _id:ObjectId(590d63bd59e819a6ae569a65),address:building:203,coord:-73.97822040000001,40.6435254,street:Church Avenue,zip code:11218,borough:Brooklyn,cuisine:Ice Cream,Gelato,Yogurt,Ices,grades:date:ISODate(2014-02-10T00:00:00Z),grade:A,score:2,date:ISODate(2013-01-02T
6、00:00:00Z),grade:A,score:13,date:ISODate(2012-01-09T00:00:00Z),grade:A,score:An Introduction to Database SystemnMongoDB Shell:MongoDB Shell:可以可以运行任何运行任何JavaScriptJavaScript脚本;脚本;n在在ShellShell中可以键入中可以键入helphelp以获取以获取帮助;帮助;n执行执行exitexit命令、命令、quit()quit()、Ctrl+CCtrl+C均可退出均可退出ShellShell环境环境5.1.1下载与安装下载与
7、安装nb bin in目录下配置文件:目录下配置文件:mongod.cfgmongod.cfgn其他其他配置项:多节点部署地址、分片、复制集、配置项:多节点部署地址、分片、复制集、安全管理、网络接口等安全管理、网络接口等5.1.1下载与安装下载与安装nBinBin目录下可执行程序:目录下可执行程序:5.1.1下载与安装下载与安装可执行文件名称可执行文件名称说明说明mongod启动数据库实例进程对应的可执行文件。是整个MongoDB中最核心的内容,负责数据库的创建、删除等各项管理工作,运行在服务器端为客户端提供监听。详细参数说明请查看mongodhelpmongo是一个与mongod进程进行交互
8、的JavaScript Shell进程,它提供了一些交互函数,用于系统管理员对数据库系统进行管理mongodump提供了一种从,MongoDB实例上创建BSON dump文件的方法,如mongodump-port 27017-db test-out d:bakmongorestore可以将mongodump命令导出的文件数据恢复到数据库中mongoexport可以将MongoDB实例数据导出为BSON文件mongoexport-port 27017-db test-collection foo-out d:bakfoo.jsonmongoimport可以将JSON或CSV文件内容导入Mongo
9、DB,如mongoimport-port 27017-db test-collection foo-file d:bakfoo.jsonnBinBin目录下可执行程序:目录下可执行程序:5.1.1下载与安装下载与安装可执行文件名称可执行文件名称说明说明mongofiles 提供了操作MongoDB分布式文件存储系统的命令行接口,如可以将本地文件上传到数据库中保存mongos 分片机制中用到的进程,所有应用程序端的查询操作都会先由它分析,然后它会将查询定位到具体的某一个分片上mongostat 展示当前正在运行的mongod实例状态的工具mongotop 用于跟踪分析MongoDB实例花在读写数
10、据上的时间,它提供的统计数据在每一个collection级别上bsondump 将BSON格式的文件转储为JSON格式的数据An Introduction to Database SystemnMongoDBMongoDB访问管理工具:访问管理工具:Robo3T Robo3T httpshttps:/:/robomongo.orgrobomongo.orgnStudio3TStudio3T收费版,可试用收费版,可试用3030天,支持导入、导出,功能丰富天,支持导入、导出,功能丰富n其他:其他:MongovueMongovue、RockMongoRockMongo5.1.1下载与下载与安装安装n
11、Robo3TRobo3T:连接数据库:连接数据库 5.1.1下载与安装下载与安装n界面示意界面示意5.1.1下载与安装下载与安装切换树形、表格、文档输出格式命令输入区结果显示区数据库、集合选择区5.1.2 常用操作符常用操作符nMongoDBMongoDB提供了丰富的文档操作运算符提供了丰富的文档操作运算符12序号序号操作符操作符说明说明示例示例1)关系关系比较类比较类1$lt,$lte$gt,$gte,$eq,$ne,=,=,db.c.find(“a:$gt:100 )db.c.find(x:$ne:3 )2$in属于db.c.find(j:$in:2,4,6)3$nin不属于db.c.fi
12、nd(j:$nin:2,4,6)2)元素元素查询类查询类4$exists 可选:true,falsedb.c.find(a:$exists:true )5$type按数据类型查询db.c.find(a:$type:2 )3)模式模式评估类评估类6$mod 取模:a%10=1db.c.find(a:$mod:10,1 )7$regex正则表达式匹配db.c.find(sku:$regex:/ABC/i )8$where主要弥补其他方式无法满足的查询条件,一般效率较低db.myCollection.find($where:this.a 3 )5.1.2 常用操作符常用操作符13序号序号操作符操作符
13、说明说明示例示例3)模式评估类模式评估类9$text文本搜索,要先建索引db.articles.find($text:$search:coffee )4)逻辑运算逻辑运算类类10$nor$or的反操作,即不匹配(a或b)db.c.find(name:bob,$nor:a:1 ,b:2 )11$orOr子句,语义或db.c.find(name:bob,$or:a:1 ,b:2 )12$and与运算db.c.find(name:bob,$and:a:1 ,b:2 )13$not非运算db.c.find(name:bob,$not:a:1 ,b:2 )5)数组数组查询类查询类14$size匹配数组长
14、度db.c.find(a:$size:1 )5.1.2 常用操作符常用操作符n$and and 示例示例n选择选择集合集合inventoryinventory中中的满足条件的满足条件是是priceprice不等于不等于1.991.99并且并且priceprice字段字段存在的文档存在的文档 db.inventory.finddb.inventory.find($and:price:$ne:1.99 ,($and:price:$ne:1.99 ,price:$exists:true price:$exists:true )n隐式隐式ANDAND操作操作 db.inventory.finddb.i
15、nventory.find(price:$ne:1.99,$exists:true (price:$ne:1.99,$exists:true )nANDAND可使用可使用多多个子表达式定义更加复杂的判定条件个子表达式定义更加复杂的判定条件 db.inventory.finddb.inventory.find($and:and:$or:price:0.99,price:1.99 ,$or:price:0.99,price:1.99 ,$or:sale:true,$or:sale:true,qtyqty:$:$lt lt:20 :20 )5.1.2 常用操作符常用操作符15序号序号操作符操作符说明
16、说明示例示例5)数组查询类数组查询类15$all数组中的元素是否完全匹配db.c.find(a:$all:2,3 )16$elemMatch数组中的元素级别需要匹配的条件db.c.find(product:$elemMatch:shape:square,color:purple)6)位位查询操作类查询操作类17$bitsAllClear 所有位的值为0db.c.find(a:$bitsAllClear:1,5 )18$bitsAllSet所有位的值为1db.c.find(a:$bitsAllSet:1,5 )19$bitsAnyClear 部分位的值为0db.c.find(a:$bitsAny
17、Clear:1,5 )20$bitsAnySet部分位的值为1db.c.find(a:$bitsAnySet:1,5 )n地理空间类操作符地理空间类操作符n$minDistanceminDistance、$maxDistancemaxDistance、$box$box、$center$center、$geoWithingeoWithin、$nearnearn 重点掌握以下内容重点掌握以下内容 文档文档CRUDCRUD操作操作 文档链接查询文档链接查询 文档聚合与管道操文档聚合与管道操作作 MongoDBMongoDB索引机制索引机制目录目录MongoDB MongoDB 基础基础1MongoD
18、BMongoDB文档文档操作技术基础操作技术基础2MongoDBMongoDB数据库集群架构数据库集群架构3MongoDBMongoDB管理与监控管理与监控4小结小结516MongoDB MongoDB 官网:官网:http:/www.mongodb.org/http:/www.mongodb.org/5.2.1 文档文档CRUD操作操作n基于基于存储客户信息的存储客户信息的ct ct集合集合来进一步学习文档来进一步学习文档的的CRUDCRUD操作操作,分别示例,分别示例如下如下n1.1.新增新增文档文档n实现实现新增单个客户新增单个客户信息信息n批量批量新增多个客户新增多个客户信息,注意文档
19、数组参数信息,注意文档数组参数1718DB操作 n使用使用insertinsert插入多个文档,但必须将多个文档放在一个插入多个文档,但必须将多个文档放在一个 里,作里,作为数组参数传递,否则默认只插入第一个文档为数组参数传递,否则默认只插入第一个文档5.2.1 文档文档CRUD操作操作1919DB操作 2.2.文档查询文档查询nfindfind条件第条件第1 1个花括号参数限定返回文档各个字段需个花括号参数限定返回文档各个字段需满足的条件,如果为空则返回集合中所有文档满足的条件,如果为空则返回集合中所有文档 db.ct.finddb.ct.find()()也可以也可以 db.ct.findd
20、b.ct.find()()db.getCollectiondb.getCollection(ct ct).find().find()#select select*from from ct ct where where Name Name=Yan Yan db.db.ct ct.find(Name.find(Name:Yan:Yan)#select#select*from from ct ct where where Name Name=Li Li and age=and age=2626 db.db.ct ct.find(Name.find(Name:Li:Li,age:26),age:26)
21、5.2.1 文档文档CRUD操作操作2020DB操作 2.2.文档查询文档查询nfindfind第第2 2个花括号参数设定返回的字段个花括号参数设定返回的字段 db.ct.finddb.ct.find(age:21,(age:21,NameName:1,age:1):1,age:1)_id:_id:ObjectIdObjectId(4c452c343d48c8f284b388e0),name:user1,(4c452c343d48c8f284b388e0),name:user1,age:21 age:21 n1 1表示显示,表示显示,0 0表示不显示,一般要求都是表示不显示,一般要求都是1 1
22、或者或者0 0 dbdb.ct.findct.find(,(,age:0)age:0)n如果只在结果中显示具体的内容字段,不包含如果只在结果中显示具体的内容字段,不包含_id_id字段,字段,参数设置示例如下。参数设置示例如下。db.ct.finddb.ct.find(N Nameame:user1:user1,_id:0_id:0)db.ct.finddb.ct.find(age:23,_id:0,Name:1,age:1)(age:23,_id:0,Name:1,age:1)n查询查询满足条件的首个满足条件的首个文档文档 db.ct.findonedb.ct.findone()()5.2.
23、1 文档文档CRUD操作操作2121DB操作 2.2.文档查询文档查询n结果排序,结果排序,1 1表示升序,表示升序,-1-1表示降序表示降序#select#select*from from ct ct order by ageorder by age db.ct.finddb.ct.find().sort(age:1().sort(age:1)#select select*from from ct ct order by sex order by sex asceasce,age,age descdesc db.ct.finddb.ct.find().sort(gender:1,age:-1
24、().sort(gender:1,age:-1)n使用使用limitlimit查询满足条件的查询满足条件的Top kTop k文档,也可用文档,也可用skipskip先先忽略忽略Top kTop k个文档,然后在结果中显示限制个数的个文档,然后在结果中显示限制个数的文档列表。如下示例表示跳过前文档列表。如下示例表示跳过前3 3个文档,然后显个文档,然后显示后续的示后续的2 2个文档。个文档。db.ct.finddb.ct.find().limit(2).skip(3)().limit(2).skip(3)5.2.1 文档文档CRUD操作操作22222.2.文档查询文档查询nININ判断条件判断
25、条件 db.ct.finddb.ct.find(age:$in:23,26,32)(age:$in:23,26,32)对应对应的操作符有的操作符有$ninnin(not in)(not in)。nOROR运算运算 db.ct.finddb.ct.find($or:age:25,age:28)($or:age:25,age:28)#age age=33=33 db.ct.finddb.ct.find($or:age:$lte:23,age:$gte:33($or:age:$lte:23,age:$gte:33)nCOUNTCOUNT计数查询计数查询 db.ct.finddb.ct.find(ag
26、e:$gt:30).count()(age:$gt:30).count()5.2.1 文档文档CRUD操作操作2323DB操作 3.3.文档删除文档删除 nRemoveRemove remove remove()()用于删除单个或全部文档,删除后的文档用于删除单个或全部文档,删除后的文档无法恢复。无法恢复。id id=db.ct.findOnedb.ct.findOne(Name:ChenName:Chen Gang)._ Gang)._id idObjectIdObjectId(“4c4508818c4a1e0bf570460f”)(“4c4508818c4a1e0bf570460f”)db
27、.ct.removedb.ct.remove(id(id)/删除上面删除上面id id对应的对应的行行n删除删除一个或多个文档也可以分别通过以下方式一个或多个文档也可以分别通过以下方式实现实现 db.ct.deleteOnedb.ct.deleteOne(age:$gt:25)(age:$gt:25)db.ct.deleteManydb.ct.deleteMany(age:$gt:25(age:$gt:25)n删除所有删除所有 db.ct.dropdb.ct.drop()()或者或者 db.ct.removedb.ct.remove()()5.2.1 文档文档CRUD操作操作2424DB操作
28、3.3.文档删除文档删除 nRemoveRemove removeremove函数还可以配置第二个布尔类型的参数,如函数还可以配置第二个布尔类型的参数,如果为果为truetrue,表示只删除满足条件的第一个文档,默认为,表示只删除满足条件的第一个文档,默认为falsefalse。5.2.1 文档文档CRUD操作操作2525DB操作 4.4.文档更新文档更新 :UpdateUpdaten常用语法常用语法:db.collection.updatedb.collection.update(criteria,(criteria,objNewobjNew,upsertupsert,multmult)cr
29、iteria:criteria:需要被更新需要被更新的文档需满足的条件表达式(过滤条件)的文档需满足的条件表达式(过滤条件)objNewobjNew:更新表达式更新表达式 upsertupsert:可选,布尔值,如可选,布尔值,如目标记录不存在,是否插入新目标记录不存在,是否插入新文档文档 multi:multi:可选可选,布尔值,是否更新多个,布尔值,是否更新多个文档文档n一般用法一般用法#update users set age=100,sex=0 where name=#update users set age=100,sex=0 where name=WangWang db.ct.up
30、datedb.ct.update(Name(Name:Wang:Wang,$set:age:100,sex:0),$set:age:100,sex:0)n#update users set age=age+10#update users set age=age+10 db.ct.updatedb.ct.update(,$(,$incinc:age:10,false,true):age:10,false,true)n#update users set age=age+10,sex=1 where name=update users set age=age+10,sex=1 where name=
31、WangWang db.ct.updatedb.ct.update(Name:(Name:WangWang,$incinc:age:10,$set:sex:1):age:10,$set:sex:1)5.2.1 文档文档CRUD操作操作4 4.文档更新文档更新 :UpdateUpdaten精确匹配更新一个精确匹配更新一个文档文档 db.db.ct ct.update.update(_id:(_id:ObjectIdObjectId(5e72ddea4654e4e59dc4d1a05e72ddea4654e4e59dc4d1a0),),Name:Yan,ageName:Yan,age :23):2
32、3)n更新满足条件的第一个更新满足条件的第一个文档文档 db.ct.updatedb.ct.update(Name:Chen,$set:(Name:Chen,$set:Name:ChenName:Chen Gang,ageGang,age:32:32,false,false,falsefalse)或者也可以使用以下或者也可以使用以下updateOneupdateOne函数实现。函数实现。db.ct.updateOnedb.ct.updateOne(Name:Chen,Name:Chen,$set:$set:Name:ChenName:Chen Gang,ageGang,age:32,:32,$
33、currentDatecurrentDate:lastModifiedlastModified:true:true )或者或者 db.ct.replaceOnedb.ct.replaceOne(Name:Li,(Name:Li,Name:LiName:Li Li,ageLi,age:23:23)26DB操作 5.2.1 文档文档CRUD操作操作5.2.2 文档链接查询文档链接查询n文档之间存在关联关系时,可用文档之间存在关联关系时,可用$lookup$lookup查询查询db.orders.insertMany(_id:1,item:almonds,price:12,quantity:2,_i
34、d:2,item:pecans,price:20,quantity:1,_id:3 )db.inventory.insertMany(_id:1,sku:almonds,description:product 1,instock:120,_id:2,sku:bread,description:product 2,instock:80,_id:3,sku:cashews,description:product 3,instock:60,_id:4,sku:pecans,description:product 4,instock:70,_id:5,sku:null,description:Inco
35、mplete,_id:6)db.orders.aggregate($lookup:from:inventory,localField:item,foreignField:sku,as:inventory_docs )_id:1,item:almonds,price:12,quantity:2,inventory_docs:_id:1,sku:almonds,description:product 1,instock:120 _id:2,item:pecans,price:20,quantity:1,inventory_docs:_id:4,sku:pecans,description:prod
36、uct 4,instock:70 _id:3,inventory_docs:_id:5,sku:null,description:Incomplete,_id:6 5.2.2 文档链接查询文档链接查询n聚合聚合框架可以用来实现类似于框架可以用来实现类似于SQLSQL的的“GROUP BY”GROUP BY”的功的功能,但它的功能不限于能,但它的功能不限于此。此。n聚合聚合框架中支持的基本框架中支持的基本操作:操作:n$matchmatch:用于过滤数据,只输出符合查询条件的:用于过滤数据,只输出符合查询条件的文档;文档;n$sort$sort:将输入文档排序后输出;:将输入文档排序后输出;n$
37、limitlimit:用来限制聚合返回的文档:用来限制聚合返回的文档数;数;n$skip$skip:在聚合过程中跳过指定数量的文档,并返回余下的:在聚合过程中跳过指定数量的文档,并返回余下的文文档;档;n$groupgroup:将集合中的文档分组,可用于统计:将集合中的文档分组,可用于统计结果;结果;n$unwindunwind:将文档中的某一个数组类型字段拆分成多条,每条:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值;包含数组中的一个值;n$projectproject:修改输入文档的结构。可以用来重命名、增加或删:修改输入文档的结构。可以用来重命名、增加或删除字段除字段;
38、n$geoNeargeoNear:输出接近某一地理位置的有序文档:输出接近某一地理位置的有序文档;5.2.3 文档文档聚合与管道操作聚合与管道操作nMongoDBMongoDB的聚合操作和的聚合操作和SQLSQL的关系的关系5.2.3 文档文档聚合与管道操作聚合与管道操作5.2.3 文档文档聚合与管道操作聚合与管道操作nMongoDBMongoDB提供三种方式的聚合提供三种方式的聚合运算运算n1 1)单一目的的聚合方法(单一目的的聚合方法(Single Purpose Single Purpose Aggregation MethodsAggregation Methods)对于对于简单的排序
39、、计数、查看某个字段都有哪简单的排序、计数、查看某个字段都有哪些不同取值等操作,些不同取值等操作,MongoDB MongoDB 提供了专门的实现提供了专门的实现单一目的聚合操作的函数,如单一目的聚合操作的函数,如sort()sort()、count()count()、distinct()distinct()等。示例如下等。示例如下。db.inventory.distinctdb.inventory.distinct(item)(item)db.inventory.finddb.inventory.find(status:Astatus:A).count).count()()5.2.3 文档文
40、档聚合与管道操作聚合与管道操作nMongoDBMongoDB提供三种方式的聚合提供三种方式的聚合运算运算n2 2)聚合管道(聚合管道(Aggregation PipelineAggregation Pipeline)管道是指通过一个处理管道是指通过一个处理序列,分序列,分阶段、分步骤地阶段、分步骤地将一系列文档处理成所需要的将一系列文档处理成所需要的结果。结果。类似类似面向对象编程思想中方法链的依次调用过程面向对象编程思想中方法链的依次调用过程。语法形式:语法形式:db.collection.aggregatedb.collection.aggregate(阶段阶段1,1,阶段阶段2,2,阶段
41、阶段n)n)阶段中可以通过阶段中可以通过$+field$+field名称,引用前一阶段字段名称,引用前一阶段字段名称完成相应操作名称完成相应操作5.2.3 文档文档聚合与管道操作聚合与管道操作n聚合聚合管道示例管道示例nMongoDBMongoDB的聚合的聚合操作操作n作用?作用?5.2.3 文档文档聚合与管道操作聚合与管道操作nMongoDBMongoDB的聚合的聚合操作:操作:数组数组$unwind$unwindn作用?作用?5.2.3 文档文档聚合与管道操作聚合与管道操作5.2.3 文档文档聚合与管道操作聚合与管道操作nMongoDBMongoDB提供三种方式的聚合提供三种方式的聚合运算
42、运算n3 3)MRMR函数(函数(the Map-Reduce Functionthe Map-Reduce Function)n数据库中通过给集合创建索引能够大大提高文档数数据库中通过给集合创建索引能够大大提高文档数据查询的性能和据查询的性能和效率;效率;n可用可用explain()explain()方法方法了解了解findfind查询操作查询操作都都利用了哪些索引利用了哪些索引n可用可用hint()hint()方法进行使用方法进行使用哪些索引。哪些索引。nMongoDBMongoDB会为每个集合的会为每个集合的_id_id字段默认创建字段默认创建索引;索引;n各个数据库创建的索引存储在系统
43、自动创建的各个数据库创建的索引存储在系统自动创建的system.indexessystem.indexes集合集合中;中;nMongoDBMongoDB支持全文索引、地理位置索引,支持全文索引、地理位置索引,支持支持文文本类、地理空间数据的高性能访问;本类、地理空间数据的高性能访问;n重点掌握三类索引操作:重点掌握三类索引操作:创建、查询、创建、查询、删除删除5.2.4 MongoDB索引机制索引机制n一般索引操作一般索引操作1 1)创建索引)创建索引ncreateIndexcreateIndex()()方法的基本语法格式方法的基本语法格式如下:如下:db.collection.createI
44、ndexdb.collection.createIndex(keys,options)(keys,options)注注:keyskeys值为要创建的索引字段,值为要创建的索引字段,1 1 为指定按升序创建索为指定按升序创建索引,引,-1-1为按降序创建索引。参数为按降序创建索引。参数optionsoptions可以设置是否后台可以设置是否后台创建(创建(background background参数为参数为true true)、)、是否创建唯一索引、是是否创建唯一索引、是否创建稀疏索引、指定索引名称等否创建稀疏索引、指定索引名称等。n示例:示例:db.ct.createIndexdb.ct.c
45、reateIndex(Name(Name:1):1)db.ct.createIndexdb.ct.createIndex(Name:1,gender:-1)(Name:1,gender:-1)db.ct.createIndexdb.ct.createIndex(gendergender:1,:1,background:truebackground:true)5.2.4 MongoDB索引机制索引机制2 2)查询索引查询索引 db.ct.getIndexesdb.ct.getIndexes();();查看总索引记录大小查看总索引记录大小 db.ct.totalIndexSizedb.ct.tot
46、alIndexSize();();n删除索引,也适用全文索引删除删除索引,也适用全文索引删除 db.ct.dropIndexdb.ct.dropIndex(Name_1);(Name_1);n以下命令以下命令执行完后,除了默认创建的执行完后,除了默认创建的-id-id索引外,索引外,ct ct集合集合其他索引将全部删除。其他索引将全部删除。db.ct.dropIndexesdb.ct.dropIndexes();();5.2.4 MongoDB索引机制索引机制n全文索引操作全文索引操作 使用使用createIndexcreateIndex函数创建全文索引时,需要对字符串类型或函数创建全文索引时
47、,需要对字符串类型或字符串数组类型的字段指定创建字符串数组类型的字段指定创建texttext类型的索引,如下类型的索引,如下示例示例 db.reviews.createIndexdb.reviews.createIndex(comments:text )(comments:text )n全文索引也可以基于多个字段建立复合索引。全文索引也可以基于多个字段建立复合索引。db.reviews.createIndexdb.reviews.createIndex(subject:text,subject:text,comments comments:text:text )n有时在不确定哪些字段是文本类型
48、时,也可以有时在不确定哪些字段是文本类型时,也可以使用使用“$“$*(wildcard specifierwildcard specifier)通配说明符对所有文本类型字段创建全文)通配说明符对所有文本类型字段创建全文索引索引,如下如下示例示例 db.collection.createIndexdb.collection.createIndex($($*:text ):text )5.2.4 MongoDB索引机制索引机制n全文索引操作(续)全文索引操作(续)对于对于创建全文索引后的集合,创建全文索引后的集合,findfind方法利用索引示例方法利用索引示例如下。如下。查询包含查询包含badb
49、ad的文档。的文档。db.collection.finddb.collection.find($text text:$:$search:bad)search:bad)查询包含查询包含bad bad 或者或者 spoiledspoiled的文档,查询参数中用空格的文档,查询参数中用空格间隔开多个关键词即可。间隔开多个关键词即可。db.collection.finddb.collection.find($text text:$:$search:bad spoiled )search:bad spoiled )查询包含查询包含bad bad 不包含不包含 okok的文档,在不需要包含的关键的文档,在
50、不需要包含的关键词前加符号词前加符号-。db.collection.finddb.collection.find($text:$text:$search:bad-ok )search:bad-ok )查询包含查询包含not oknot ok完整词组的文档,在完整词组前后用引完整词组的文档,在完整词组前后用引号括起来。号括起来。db.collection.finddb.collection.find($text text:$:$search:not ok)search:not ok)5.2.4 MongoDB索引机制索引机制n地理位置索引地理位置索引nMongoDBMongoDB的地理位置索引可
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。