win7 安装 MongoDB 及简单操作
下载地址 http://dl.mongodb.org/dl/win32/x86_64 这里用的版本是 mongodb-win32-x86_64-v3.4-latest-signed.msi 同时下载 mongodb-compass 下载地址 https://www.mongodb.com/products/compass 这里用到版本是 mongodb-compass-1.12.4-win32-x64.exe mongodb-compass安装一路next,直至安装完成 MongoDB安装,选择Custom 安装目录选择 D:\ApacheServer\MongoDB 安装完成后 要手动创建数据目录 在安装目录下创建data文件夹,这里是 D:\ApacheServer\MongoDB\data 进入到安装目录 d: cd ApacheServer/MongoDB/bin 启动MongoDB有两种方法 第一种直接在命令行中启动,如下 运行 MongoDB 并关联数据目录,执行成功后显示一长串信息 mongod --dbpath D:\ApacheServer\MongoDB\data 第二种办法将MongoDB注册到服务中,在命令行中使用 net start MongoDB 或 net stop MongoDB 即可控制启动停止服务 在 D:\ApacheServer\MongoDB 下创建文件mongod.cfg 并在其中设置内容 //===============================以下代码为mongod.cfg文件中内容========================================== systemLog: destination: file path: D:\ApacheServer\MongoDB\mongod.log storage: dbPath: D:\ApacheServer\MongoDB\data //===============================以上代码为mongod.cfg文件中内容========================================== 然后在命令行中输入 mongod.exe --config "D:\ApacheServer\MongoDB\mongod.cfg" --install 启用MongoDB net start MongoDB 如需要移除MongoDB服务执行 mongod.exe --remove 启动MongoDB后即可打开MongoDB Compass 输入localhost,端口号默认27017即可,刚创建的MongoDB没有用户名密码 MongoDB 里一维数组(文档)都是要指定属于哪个表(集合)的,一个一维数组就是一条表数据,而数组里的键值(字段名)可随意添加删减,相当于所属表就自动添加删除该字段 当该表下所有的数组都删除了某字段,则相当该表也没了该字段 MongoDB在表里添加一条新数组(文档)时,会自动在数组中添加 _id 字段并设置为主键 MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。 需要注意的是: 1.文档中的键/值对是有序的。 2.文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。 3.MongoDB区分类型和大小写。 4.MongoDB的文档不能有重复的键。 5.文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。 MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。 如果需要进入MongoDB Shell后台管理,需要先打开mongodb装目录的下的bin目录,然后执行mongo.exe文件,这里是 D:\ApacheServer\MongoDB\bin\mongo.exe 鼠标双击打开即可 进入mongoDB后台后,会默认链接到 test 数据库: 在 MongoDB Shell 中直接输入 db 回车,查看当前操作的数据库 db 显示 test show dbs 命令可以显示所有数据的列表,输入 show dbs 显示 admin 0.000GB local 0.000GB test 0.000GB use 数据库名 : 如果数据库不存在,则创建数据库,否则切换到指定数据库。刚创建的库用 show dbs 查看不会显示,需要往库中插入数据后才显示 有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。 admin : 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。 local : 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合 config : 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。 输入 use local 显示 switched to db local 删除当前数据库,删除后用db查看当前数据库名不变,但是输入show dbs显示的数据库列表中已没有当前库 db.dropDatabase() 查看当前库的集合(数据表)列表 show tables 或 show collections 创建集合(表) MongoDB 中,其实不需要创建集合。当向某个新集合插入文档时,如果该集合不存在 MongoDB 会自动创建集合 创建集合语法 db.createCollection(tablename, {options:value}) 参数说明: tablename : 要创建的集合名称 options : 可选参数, 指定有关内存大小及索引的选项 options 可以是如下参数: capped : 布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档(条记录)。默认为 false。当该值为 true 时,必须指定 size 参数。 autoIndexId : 布尔(可选)如为 true,自动在 _id 字段创建索引,默认为 false。如果建表时添加该选项创建成功后会有提示,该参数在将来版本中会取消。 size : 数值(可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。 max : 数值(可选)指定固定集合中包含文档的最大数量。 例创建testtable表,输入 db.createCollection("testtable") 或者带参数的输入 db.createCollection("testtable",{capped:true,autoIndexId:true,size:6142800,max:10000}) 删除集合(表) 这里删除 testtable 集合(表) db.testtable.drop() 插入一些简单的记录 向 testtable 表插入 title、tags、likes字段的值 testtable 表和 title 等字段如不存在会被自动创建 方法一,直接输入 db.testtable.insert({title:'MongoDB',tags:['mongodb','database','NoSQL'],likes:100}) 显示 WriteResult({ "nInserted" : 1 }) 方法二,或者将要插入的值保存到一个变量中,再将该变量插入到表中 例,将值保存到 testvar 变量中 testvar=({title:'MongoDB',tags:['mongodb','database','NoSQL'],likes:100}) 再将该变量插入到表中 db.testtable.insert(testvar) 显示 WriteResult({ "nInserted" : 1 }) 执行插入时可将返回值赋给一个变量,命令行里输入该变量将打印出返回信息,插入单条或多条记录时均可 例 var resualt = db.testtable.insert({title:'MongoDB',tags:['mongodb','database','NoSQL'],likes:100}) 再输出 resualt 显示 WriteResult({ "nInserted" : 1 }) 一次插入多条数据 db.testtable.insert([{testfield:'testval1'},{testfield:'testval2'}]) 或 testvar=([{testfield:'testval1'},{testfield:'testval2'}]) db.testtable.insert(testvar) 更新文档 这里需要注意的是,固定集合中文档的大小不能改变,否则更新会报错 语法格式如下: db.tablename.update( where, update, {options:value}) 参数说明: where : update 的查询条件,类似sql 的 where 条件。 update : update 的对象和一些更新的操作符(如$set,$inc...)等,也可以理解为sql update查询内set后面的 options 可以是如下参数: upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入新记录,true为插入,默认是false,不插入。 multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern : 可选,抛出异常的级别。 例 db.testtable.update({'testfield':'testval1'},{$set:{'testfield':'testval13'}}) 替换文档 语法格式如下: db.tablename.save(document, {options:value}) 参数说明: document : 文档数据。 options 可以是如下参数: writeConcern : 可选,抛出异常的级别。 例,将表中 _id 为 5ab48f66d4226cbbff985283 的记录整条替换为新的记录,之前记录的一切字段作废被替换新的内容 db.testtable.save({'_id':ObjectId('5ab48f66d4226cbbff985283'),'title':'MongoDB_test'}) 删除文档 方法一 语法格式如下 db.tablename.remove(where, justOne) 参数说明: where : 可选 删除的文档的条件。 justOne : 可选 如果设为 true 或 1,则只删除一个文档。默认 false 符合条件的全删。 例 db.testtable.remove({'title':'MongoDB_test'}) 删除一条数据 db.testtable.remove({'title':'MongoDB_test'},1) 删除全部数据 db.testtable.remove({}) 方法二 语法格式如下 删除一条 db.tablename.deleteOne(where) 或 删除多条 db.tablename.deleteMany(where) 例 db.testtable.deleteOne({'title':'MongoDB_test'}) 或 db.testtable.deleteMany({'title':'MongoDB_test'}) 查询表内文档 db.tablename.find(where, {fieldname : val}) 参数说明: where : 可选,使用查询操作符指定查询条件,不加条件则查询获取整个表内所有文档(条数据) fieldname : 可选,fieldname 为文档中键值名,表示返回显示或不显示指定的键,val 值为1或0。若不加 fieldname 参数则查询时返回文档中所有键值(默认省略fieldname参数)。 如有多个 fieldname 参数则其 val 值必须都一样,全是1则只返回显示指定的 fieldname 键值,全是0则返回结果隐藏指定的 fieldname 键值 pretty() 方法以格式化的方式来显示查询文档。 db.tablename.find(where, projection).pretty() 只返回一个文档,显示内容会自动格式化,不用加 pretty()。 db.tablename.findOne(where, projection) where 查询条件 等于 -- fieldname : value 小于 -- fieldname : {$lt : value} 小于等于 -- fieldname : {$lte : value} 大于 -- fieldname : {$gt : value} 大于等于 -- fieldname : {$gte : value} 不等于 -- fieldname : {$ne : value} 例查询 testtable 表 and条件 相当于 where testfield = 'testval1' and testfield2 = 'testval11' db.testtable.find({testfield:'testval1',testfield2:'testval11'}) or条件 相当于 where testfield = 'testval1' or testfield2 = 'testval22' db.testtable.find({$or:[{testfield:'testval1'},{testfield2:'testval22'}]}) and和or联合使 用相当于 where testfield3 > 100 and (testfield = 'testval1' or testfield2 = 'testval22') db.testtable.find({testfield3:{$gt:100}, $or:[{testfield:"testval1"}, {testfield2:"testval22"}]}) 返回结果条数限制 db.tablename.find().skip(int).limit(int) skip 接受一个数字参数,为返回结果中,跳过指定的条数再显示 limit 接受一个数字参数,为返回结果中,限制显示的条数 例 显示除第一条以下的数据 db.testtable.find().skip(1) 只显示第一条数据 db.testtable.find().limit(1) 只显示第二条数据 db.testtable.find().skip(1).limit(1) 返回结果排序 db.tablename.find().sort({fieldname : val}) 参数说明: fieldname : 指定要排序的键值名 val : 值为 1 升序排列或 -1 降序排列。 skip(),limilt(),sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。 例 db.testtable.find().sort({testfield3 : 1}) MongoDB 常用的几种数据类型 String : 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 Integer : 整型数值。用于存储数值。根据所采用的服务器,可分为 32 位或 64 位。 Boolean : 布尔值。用于存储布尔值(真/假)。 Double : 双精度浮点值。用于存储浮点值。 Min/Max keys : 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 Array : 用于将数组或列表或多个值存储为一个键。 Timestamp : 时间戳。记录文档修改或添加的具体时间。 Object : 用于内嵌文档。 Null : 用于创建空值。 Symbol : 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 Date : 日期时间。用 UNIX 时间格式来存储当前日期或时间。可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 Object ID : 对象 ID。用于创建文档的 ID。 Binary Data : 二进制数据。用于存储二进制数据。 Code : 代码类型。用于在文档中存储 JavaScript 代码。 Regular expression : 正则表达式类型。用于存储正则表达式。 writeConcern 抛出异常的级别 NONE : 没有异常抛出。 NORMAL : 仅抛出网络错误异常,没有服务器错误异常。 SAFE : 抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。 MAJORITY : 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。 FSYNC_SAFE : 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。 JOURNAL_SAFE : 抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。 REPLICAS_SAFE : 抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。