资讯专栏INFORMATION COLUMN

「全栈初探」- Mongoose的简单使用

vboy1010 / 1678人阅读

摘要:下载依赖包完成项目创建,项目结构连接数据库在根目录下创建,输入以下代码,监听的几个事件,如果以上操作都没错的话,那么就会监听第一个事件事件,表示连接数据库成功,在最后,我们导出对象,以供其他模块使用。

一、准备工作 1. 启动mongo数据库

关于下载安装启动数据库我这里就不做过多解释,谷歌下会有很多教程,启动成功后的命令窗如下所示:

2. 启用可视化Mongo工具

这里我们用的是Robo 3T,为什么要用可视化工具呢,因为小白对于命令行还是很陌生的,在命令行中查看数据库的内容有些不直观,这个可视化工具的安装包谷歌一下就阔以找到啦~

启动可视化工具

连接数据库(前提是已经启动了mongo数据库)

新建数据库mongoosetest


创建成功

数据库准备工作完成后,我们进入代码环节啦~

二、利用mongoose进行简单的数据库操作 1. 新建项目

新建空文件夹,命名为mongooseTest

启动终端,进入该文件夹

在命令行中输入npm init 初始化项目

</>复制代码

  1. npm init

这里有个小问题就是项目不能以驼峰命名,所以npm init后会让你输入一个别名,我们就叫mongoosetest好了,然后一直Enter,项目创建成功。

下载依赖包 mongoose

</>复制代码

  1. npm i mongoose -s

完成项目创建,项目结构:

2. 连接数据库

在根目录下创建db.js,输入以下代码,监听connection的几个事件,如果以上操作都没错的话,那么就会监听第一个事件“connect”事件,表示连接数据库成功,在最后,我们导出mongoose对象,以供其他模块使用。

</>复制代码

  1. /**
  2. * Created by vince on 2017/7/10.
  3. * db.js
  4. */
  5. var mongoose = require("mongoose");
  6. //设置mongo存储路径
  7. var DB_URL = "mongodb://localhost:27017/mongoosetest";
  8. //连接数据库
  9. mongoose.connect(DB_URL);
  10. //连接成功后输出语句
  11. mongoose.connection.on("connected",function () {
  12. console.log("Mongoose connect " + DB_URL + " success");
  13. });
  14. //连接异常现实错误原因
  15. mongoose.connection.on("error",function (err) {
  16. console.log("Mongoose connect Error:" + err);
  17. });
  18. //连接断开后输出语句
  19. mongoose.connection.on("disconnected",function () {
  20. console.log("Mongoose connect disconnected");
  21. });
  22. //导出mongoose对象
  23. module.exports = mongoose;

运行db.js,如下图所示:

第一步连接数据库成功啦~

3. 新建Schema与发布Model

那么什么是Schema呢?schema是mongoose里会用到的一种数据模式,可以理解为我们传统数据库中的表(table)结构的定义,简单地说,就是一个数据模板,每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力。

那什么又是Model呢?Model是由Schema发布生成的模型,具有抽象属性和行为的数据库操作对,Model可以直接操作Mongo数据库中的数据。

解释完了代码用说话,新建user.js,输入以下代码,创建一个user的schema,并且利用Schema发布一个Model,导出Model:

</>复制代码

  1. /**
  2. * Created by vince on 2017/7/10.
  3. * user.js
  4. */
  5. //引入之前我们创建的mongose对象
  6. var mongoose = require("./db.js");
  7. //创建一个schema对象
  8. var Schema = mongoose.Schema;
  9. //创建一个schema实例
  10. var UserSchema = new Schema({
  11. username: {type: String},
  12. userpwd: {type: String},
  13. userage: {type: Number},
  14. logindate: {type: Date}
  15. });
  16. //利用UserSchema实例,发布一个User的model并且导出
  17. module.exports = mongoose.model("User",UserSchema);
4. Model创造Entity实体,对数据库操作

那Entity又是什么呢?Entity是由Model创建的实体,他的操作也会影响数据库。

新建insert.js,输入以下代码:

</>复制代码

  1. /**
  2. * Created by vince on 2017/7/10.
  3. * insert.js
  4. */
  5. //引如User的Model
  6. var User = require("./user");
  7. //创建一个插入数据到数据库中的函数
  8. function insert() {
  9. //用Model创建一个Entity实体,就是一个User的数据
  10. var user_1 = new User({
  11. username: "Vince Hua",
  12. userpwd: "123456",
  13. userage: 20,
  14. logindate: new Date()
  15. });
  16. //调用user_1的save方法,插入user_1的数据到数据库中
  17. user_1.save(function (err, res) {
  18. if(err){
  19. console.log("Error: " + err);
  20. }else{
  21. console.log("Success Res: " + res)
  22. }
  23. });
  24. }
  25. //执行插入操作
  26. insert();

以上代码中的user_1就是Model创建的Entity实体,它具有很多操作,svae()只是其中一个。

运行insert.js,命令行输入框得到一下结果:

我们再查看数据库中:

Amazing,我们成功插入一个数据啦~

5. 总结Schema、Model、Entity的关系

Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

Entity : 由Model创建的实体,他的操作也会影响数据库

Schema、Model、Entity的关系是:Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。

三、mongoose的其他一些 “骚操作”

更新数据库

这里我们是直接用Model来操作数据库,新建update.js

</>复制代码

  1. /**
  2. * Created by vince on 2017/7/10.
  3. * update.js
  4. */
  5. //引入User的Model
  6. var User = require("./user.js");
  7. function update(){
  8. //wherestr是我们要进行操作的数据
  9. var wherestr = {"username" : "Vince Hua"};
  10. //update是我们更新的数据
  11. var updatestr = {"userpwd": "hhhhhh"};
  12. User.update(wherestr, updatestr, function(err, res){
  13. if (err) {
  14. console.log("Error:" + err);
  15. }
  16. else {
  17. console.log("Update Res: " + res);
  18. }
  19. })
  20. }
  21. update();

运行updata.js,操作成功,命令行输出:

更新成功,查看数据库:

删除数据

同样我们直接用Model操作数据库,新建remove.js,输入以下代码:

</>复制代码

  1. /**
  2. * Created by vince on 2017/7/10.
  3. * remove.js
  4. */
  5. var User = require("./user");
  6. function del() {
  7. //需要删除的数据
  8. var wherestr = {"username" : "Vince Hua"};
  9. User.remove(wherestr,function (err, res) {
  10. if(err){
  11. console.log("Error: " + err)
  12. }else{
  13. console.log("Success Remove: " + res);
  14. }
  15. })
  16. }
  17. del();

执行代码,得到一下结果:

查看数据库,显示数据已经被删除

查找数据

查找数据之前,我们插入一下几个数据

依旧是使用Model操作数据库,新建find.js,输入以下代码:

</>复制代码

  1. /**
  2. * Created by vince on 2017/7/10.
  3. * find.js
  4. */
  5. var User = require("./user");
  6. function findByConditions() {
  7. var wherestr = {"username" : "Mike Guo"};
  8. User.find(wherestr,function (err, res) {
  9. if(err){
  10. console.log("Error: " + err);
  11. }else{
  12. console.log("Find Res: " + res);
  13. }
  14. });
  15. }
  16. findByConditions();

执行代码,得到查询结果:

四、总结

这里介绍的知识简单的mongoose的增删改查操作,只是方便我们第一次接触Mongo入门的小练习的Demo而已,mongoose还有其他强大的操作这里没有一一介绍,希望小伙伴们可以查看中文文档了解更多,如果你看了这篇文章觉得自己已经入门啦,那么恭喜你~

所有代码已经上传到GitHub,传送门: Demo代码

nice to meet you ~ ,给个小star鼓励下?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19035.html

相关文章

  • node express mongoose简单实现全栈之增删改查

    摘要:作为一个有志向的前端,怎么能不搞搞全栈呢。。。地址欢迎大家多多交流前端技术啊,如果大家喜欢的话,请给我一个小小的哦 作为一个有志向的前端,怎么能不搞搞全(zhuang)栈(bi)呢。。。说搞咱就搞啊,后端就用node,数据库就用mongodb,前端呢,呃,再搞个node的web框架express,思路搞定,开始搭建我们的环境,搭建之前还是先看看我们的目标和成果 项目的目标和成果 sh...

    AndroidTraveler 评论0 收藏0
  • 前端小白全栈初体验

    摘要:原文来源全栈初体验前言据说现在不会点后台的前端都找不到工作了吓得我这几天看起了和并且做了一个应该算是最简单的前后端例子,如图输入账户密码,提交表单,保存信息到数据库再重定向到页面获取数据库中的信息,渲染在浏览器上具体代码主要技术前端模板后台 原文来源: 全栈初体验 前言 据说现在不会点后台的前端都找不到工作了吓得我这几天看起了Nodejs和MongoDB并且做了一个应该算是最简单的前后...

    wangym 评论0 收藏0
  • 前端小白全栈初体验

    摘要:原文来源全栈初体验前言据说现在不会点后台的前端都找不到工作了吓得我这几天看起了和并且做了一个应该算是最简单的前后端例子,如图输入账户密码,提交表单,保存信息到数据库再重定向到页面获取数据库中的信息,渲染在浏览器上具体代码主要技术前端模板后台 原文来源: 全栈初体验 前言 据说现在不会点后台的前端都找不到工作了吓得我这几天看起了Nodejs和MongoDB并且做了一个应该算是最简单的前后...

    Jioby 评论0 收藏0
  • 前端小白全栈初体验

    摘要:原文来源全栈初体验前言据说现在不会点后台的前端都找不到工作了吓得我这几天看起了和并且做了一个应该算是最简单的前后端例子,如图输入账户密码,提交表单,保存信息到数据库再重定向到页面获取数据库中的信息,渲染在浏览器上具体代码主要技术前端模板后台 原文来源: 全栈初体验 前言 据说现在不会点后台的前端都找不到工作了吓得我这几天看起了Nodejs和MongoDB并且做了一个应该算是最简单的前后...

    PumpkinDylan 评论0 收藏0
  • 基于 Vue2+Node+mongoDB 前后端分离全栈练手小项目

    摘要:本文源码简介之前刚入门并做好了一个简而全的纯全家桶的项目,数据都是本地模拟请求的详情请移步这里为了真正做到数据库的真实存取,于是又开始入门了并以此来为之前的页面写后台数据接口。 本文源码:Github 简介: 之前刚入门vue并做好了一个简而全的纯vue2全家桶的项目,数据都是本地 json 模拟请求的;详情请移步这里:vue-proj-demo 为了真正做到数据库的真实存取,于是又...

    jay_tian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<