您的位置:首页 > 数据库 > Mongodb

mongoDB & Nodejs 访问mongoDB (一)

2017-03-12 09:59 357 查看
最近的毕设需要用到mongoDB数据库,又把它拿出来再学一学,下盘并不是很稳,所以做一些笔记,不然又忘啦.

安装 mongoDB & mongoVUE

mongoDB: https://www.mongodb.com/download-center?jmp=nav#enterprise
mongoVUE: mongoVUE 是一个mongoDB 数据库的可视化界面 ,官网被墙了. 而且企业版15天后功能受限,所以在网上找了个破解版的.

好了,点击下载 ...

mongoDB 我下载的是archive版的, 解压即用.



将bin 目录配置到环境变量中 .

下面是mongoDB 一些常用的功能



mongod
开机
mongo
运行数据库
mongoimport
导入数据库
mongoexport
输出数据库
mongorestore
备份数据库

...

好了,现在开机

mongod --dbpath d:/mongodb/data

--dbpath
表示数据库文档所在的文件夹,也就是说 mongoDB 真的有物理文件对应的数据库.







可以看到,已经启动成功了

mongoDB 增删改查

如果要使用这个数据库, 那就重新打开一个终端,并且保持
mongod
进程执行



show dbs    // 使用数据库
use local   // 使用数据库
use test    // 当use 一个不存在的数据库, 那么就会新建一个数据库,但是 只有在插入数据后,数据库才会被真正创建成功
db          // 查询当前在哪个数据库




显示所有集合

show collections

现在插入一条数据

db.student.insert({"name":"pawn","age":12,"gender":"male"});

查询集合

db.student.find()

我们多插入几条数据,用来条件查询

db.student.insert({"name":"ququ","age":18,"gender":"male"});
db.student.insert({"name":"tom","age":9});


由于在mongoDb中数据是没有格式的, 所以上面的第二条语句完全可行





下面做一个查询

db.student.find({name:'ququ'});
db.student.find({age:{$gt:12}})




也是采用一个对象查询, 这对于JSer 简直太友好了

删除当前数据库

db.dropDateabase()

但是,通常,我们不可能一直insert 数据, 所以一般使用
mongoimport
来导入数据库

student.json

{
"id": "0001",
"name": "pawn",
"age": 18,
"gender": "男",
"specialty": "软件工程",
"job": "前端工程师",
"contact": ["5555", "aagnoag@126.com"]
} {
"id": "0002",
"name": "jk",
"age": 22,
"gender": "男",
"specialty": "软件工程",
"job": "全栈工程师",
"contact": ["5555", "aagnoag@126.com"]
} {
"id": "0002",
"name": "alice",
"age": 20,
"gender": "女",
"job": "鼓励师",
"contact": ["5555", "aagnoag@126.com"]
}

通过下面的命令导入到数据库test 的student 集合中,注意,执行这条命令必须要先退出mongo

mongoimport --db test --collection student --drop --file src/student.json




条件查询

在mongoDB中, 一切都是基于对象的, 查询也是,其删除和更改操作也必须要先查询才可以,所以先深入了解连接查询.

这里举几个例子,条件查询, 并 , 或 ,排序

继续使用上面的数据库

查询年龄大于20岁的男同学.

db.student.find({"gender":"男","age":{$gt:20}})




两个条件中的逗号就表示并

查找年龄大于 21 岁或者小于 19岁的同学

db.student.find({$or:[{age:{$gt:21}},{age:{$lt:19}}]});




查找所有的学生, 并按照姓名排序,如果姓名一样,则按照年龄排序,
1
升序,
-1
降序

db.student.find().sort({"name":1,"age":1});




修改

修改里面也要条件查询, 必须要告诉mongo, 你要修改谁

现在,将pawn 的年龄修改为 20岁

db.student.update({"name":'pawn'},{$set:{"age":20}})




但是,如果查询到多条数据,那么只会修改第一条,所以需要加一个参数
{multi:true}


将所有年龄为20岁的名字改为 dandy

db.student.update({"age":20},{$set:{"name":"dandy"}},{multi:true})

如果不加
$set
呢? 它会覆盖掉原来所有数据

db.student.update({"name":'jk'},{"job":"student"});




删除数据

删除数据就简单了

删除job 为student的学生

db.student.remove({"job":"student"});




但是,如果查询到多条数据,那么删除的时候就会全部删除,如果只删一条, 需要加入参数
justOne:true


删除名为dandy 的一个人

db.student.remove({"name":"dandy"},{justOne:true})




删除所有记录

db.student.remove({})

好了, 关于一些API就简单学了学,也懒得背,不会再去查吧

官方文档非常详细 https://docs.mongodb.com/getting-started/shell/introduction/,不过都是英文的.
mongoDB 的文档非常详细,所有的用法都可以在文档中查到.

mongoVUE

下面我们看看mongoVUE ,这个破 解起来也非常简单,有需要也可以发我邮件.

创建一个连接



An easy way to learn shell commands. As you use MongoVUE, corresponding shell commands are displayed here for a quick reference.

当使用界面操作mongoDB,下面会给出相应的命令 ,诶这就很舒服了, 很灵动 .

注意, 想要使用 mongoVUE ,也必须要使用mongod 开机

好了,这个时候我们使用命令行插入的数据却在mongoVUE 中怎么也找不到,经过查询发现

3.x默认是wiredTiger 引擎,2.x默认是mmapv1 引擎

打开MongoDB服务器,打开管理软件连接到服务器,此时如果数据库是默认条件下打开的,那么MongoVUE的collection列表是没法检测到,也没法新建的。这是因为MongoDB 3.2之后默认启动的是wiredTiger引擎,这个引擎和之前的引擎不同,而管理软件匹配的还是之前的引擎,所以无法使用。

此时要重新启动MongoDB服务器。启动命令是: mongod –-storageEngine mmapv1 –-dbpath XXXXX, 其中XXXXX是你的数据库存储路径。这样启动之后,再使用MongoVUE连接数据库服务器就可以了。

于是使用

mongod –-storageEngine mmapv1 –-dbpath D:/mongoDB/data

这样就好了



不过还是建议使用命令行操作, 用mongoVUE 看看就可以了,因为 nodejs 的语法和shell 非常相似.

下面开始讲解 nodeJS如果操作mongoDB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: