NodeJS第4天--MongoDB

发布时间:2026/7/28 19:41:10
NodeJS第4天--MongoDB 一、MongoDB安装目录一、MongoDB安装二、MongoDB的使用三、命令行操作四、更改字段类型五、MongoDB索引官网https://www.mongodb.com/手册https://docs.mongodb.org/manual/非结构型数据库。没有行、列的概念。用JSON来存储数据。集合就相当于“表”文档就相当于“行”。1、下载并解压找到相应的版本系统双击进入得到以下2、创建存放数据目录F:\mongodb\data3、在cmd中进入安装目录F:\mongodb-win32-i386-2.6.6\bin执行开启mongodb服务命令f:cd f:\mongodb-win32-i386-2.6.6\bin 回车mongod -dbpath F:\mongodb\data 回车4、执行命令后显示服务信息标示mongoDB成功。5、开启另外一个cmd,开启新的cmd窗口。输入命令进行测试f:cd f:\mongodb-win32-i386-2.6.6\binmongo二、MongoDB的使用版本mongoDB 3.4.15D:\aaa\db\mongodb3.4.15\binD:\aaa\db\mongodb3.4.15\data开机命令mongod --dbpath D:\aaa\db\mongodb3.4.15\bin我本机为mongod --dbpath D:\aaa\db\bin那么我们就能在系统的任何盘符使用mongo命令了mongo使用数据库mongod开机mongoimport导入数据数据导入(整个数据库)将源代码目录下sql文件夹(acltest.dmp/acltest)的内容拷贝到mongodb安装目录的bin目录下,命令行方式进入mongodb安装目录的bin目录下运行mongorestore -d acltest acltest.dmp/acltest将数据导入acltest表详解 mongoimport--db test--collection restaurants--drop--file primer-dataset.json-db test 想往哪个数据库里面导入--collection restaurants 想往哪个集合中导入--drop 把集合清空--file primer-dataset.json 哪个文件数据导出(单个表)D:\aaa\db\mongodb3.4.15\binmongoexport -d iflashbuy_log -c area -o c:\area.dat参数说明:-d 指明使用的库, 本例中为” iflashbuy_log”-c 指明要导出的表, 本例中为”area”-o 指明要导出的文件名及目录, 本例中为”area.dat”从上面可以看到导出的方式使用的是JSON 的样式例子数据导出(整个数据库)D:\aaa\db\mongodb3.4.15\bin mongodump -h 127.0.0.1:27017 -d acltest -o c:\area.da参数说明-h MongDB所在服务器地址例如127.0.0.1当然也可以指定端口号127.0.0.1:27017-d 需要备份的数据库实例例如test-o 备份的数据存放位置例如/home/mongodump/当然该目录需要提前建立这个目录里面存放该数据库实例的备份数据。例子三、命令行操作命令大全MongoDB常用操作命令大全 - CSDN博客https://blog.csdn.net/piaocoder/article/details/52384756要管理数据库必须先开机开机使用mongod --dbpath c:\mongo管理数据库mongo(一定要在新的cmd中输入)列出所有数据库show dbs使用某个数据库use 数据库名字 不存在则创建查看当前所在数据库db清屏cls查看所有的表show collections查看表中的数据db.users.find()如果真的想把这个数据库创建成功那么必须插入一个数据。数据库中不能直接插入数据只能往集合(collections)中插入数据。不需要创建集合只需要写语法1 db.student.insert({“name”:”xiaoming”});db.student 系统发现student是一个陌生的集合名字所以就自动创建了集合。删除数据库删除当前所在的数据库1 db.dropDatabase();查找数据查找数据用find。find中没有参数那么将列出这个集合的所有文档1 db.restaurants.find()精确匹配1 db.student.find({score.shuxue:70});多个条件1 db.student.find({score.shuxue:70 , age:12})大于条件1 db.student.find({score.yuwen:{$gt:50}});或者。寻找所有年龄是9岁或者11岁的学生1 db.student.find({$or:[{age:9},{age:11}]});查找完毕之后打点调用sort表示升降排序。1 db.restaurants.find().sort( { borough: 1, address.zipcode: 1 } )查询条件修改数据修改里面还有查询条件。你要该谁要告诉mongo。查找名字叫做小明的把年龄更改为16岁1 db.student.update({name:小明},{$set:{age:16}});查找数学成绩是70把年龄更改为33岁1 db.student.update({score.shuxue:70},{$set:{age:33}});更改所有匹配项目By default, the update() method updates a single document. To update multiple documents, use the multi option in the update() method.1 db.student.update({sex:男},{$set:{age:33}},{multi: true});完整替换不出现$set关键字了1 db.student.update({name:小明},{name:大明,age:16});四、更改字段类型1、字段类型判断db.tb_name.find({status:{$type:double}).count() //所有的status字段类型为Double类型的db.tb_name.find({status:{$type:1}).count() //所有status字段类型为Double类型的字段类型转换数据类型批量转换double转为int32db.tb_name.find({status:{$type:1}}).forEach(function(x){x.statusNumberInt(x.status);db.tb_name.save(x)})string转为arraydb.log.find({record:{$type:2}}).forEach(function(x){x.recordArray(x.record);db.log.save(x)})五、MongoDB索引索引基础索引是对数据库表中一列或多列的值进行排序的一种结构可以让我们查询数据库变得更快。MongoDB 的索引几乎与传统的关系型数据库一模一样这其中也包括一些基本的查询优化技巧。下面是创建索引的命令db.user.ensureIndex({username:1})获取当前集合的索引db.user.getIndexes()删除索引的命令是db.user.dropIndex({username:1})2.在 MongoDB 中我们同样可以创建复合索引如数字 1 表示 username 键的索引按升序存储-1 表示age 键的索引按照降序方式存储。db.user.ensureIndex({username:1, age:-1})该索引被创建后基于 username 和 age 的查询将会用到该索引或者是基于 username 的查询也会用到该索引但是只是基于 age 的查询将不会用到该复合索引。因此可以说如果想用到复合索引必须在查询条件中包含复合索引中的前 N 个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话MongoDB 可以智能的帮助我们调整该顺序以便使复合索引可以为查询所用。如db.user.find({age: 30, username: stephen})随着集合的增长需要针对查询中大量的排序做索引。如果没有对索引的键调用 sortMongoDB 需要将所有数据提取到内存并排序。因此在做无索引排序时如果数据量过大以致无法在内存中进行排序此时 MongoDB 将会报错。唯一索引在缺省情况下创建的索引均不是唯一索引。下面的示例将创建唯一索引如db.user.ensureIndex({userid:1},{unique:true})如果再次插入 userid 重复的文档时MongoDB 将报错以提示插入重复键如:db.user.insert({userid:5})db.user.insert({userid:5})E11000 duplicate key error index: user.user.$userid_1 dup key: { : 5.0 }如果插入的文档中不包含 userid 键那么该文档中该键的值为 null如果多次插入类似的文档MongoDB 将会报出同样的错误如:db.user.insert({userid1:5})db.user.insert({userid1:5})E11000 duplicate key error index: user.user.$userid_1 dup key: { : null }如果在创建唯一索引时已经存在了重复项我们可以通过下面的命令帮助我们在创建唯一索引时消除重复文档仅保留发现的第一个文档如先删除刚刚创建的唯一索引db.user.dropIndex({userid:1})2、插入测试数据以保证集合中有重复键存在。db.user.remove()db.user.insert({userid:5})db.user.insert({userid:5})3、重新创建唯一索引db.user.ensureIndex({userid:1},{unique:true })我们同样可以创建复合唯一索引即保证复合键值唯一即可。如db.user.ensureIndex({userid:1,age:1},{unique:true})索引的一些参数如果在为已有数据的文档创建索引时可以执行下面的命令以使 MongoDB 在后台创建索引这样的创建时就不会阻塞其他操作。但是相比而言以阻塞方式创建索引会使整个创建过程效率更高但是在创建时 MongoDB 将无法接收其他的操作。db.user.ensureIndex({username:1},{background:true})mongoose给字段添加索引的方法在定义schema的时候1表示升序索引-1表示降序索