初尝 mongodb+node.js

前言:你们这些不好好写接口的后台,非要逼着前端一统天下。纯属开玩笑哈,第一次写跟后台相关的东西,当揭开后台神秘的面纱的时候,那种惊喜、开心、成就感让我重回当初写出第一个hello world的时候。

由于我是用的是win10系统就以windows为基础说啊,linux和mac os的自行解决哈,不过应该也是大同小异的。

1. 安装

mongodb的下载和安装就不说了啊,还没有下载安装的自行去Mongodb 官网下载安装即可。

2.创建data 

这部分内容主要参考 NodeJS+Express+MongoDB 的文章,我主要说一下踩到的坑和遇到的错误处理

安装好之后,在根目录下创建data文件夹,我是放在e盘里的。

e:\data\db用于存放mongodb的数据文件

e:\data\log用于存放mongodb的日志文件

  错误处理

    1. 使用net start mongodb命令启动MongoDB服务发生系统错误,返回值为5

      解决方法:cmd使用管理员身份打开即可,到C:\Windows\System32找到cmd.exe然后以管理员的身份运行。为了避免每次启  动都要查找一次cmd文件,我把cmd放在了开始菜单里,右键固定在开始菜单就好了。

    2. 使用net start mongodb命令启动mongodb系统出错。 发生系统错误 1067。 进程意外终止。

      解决方法:MongoDB安装目录\data\将此文件夹下的mongod.lock删除,我没有遇到这个问题,也不知道能不能正确解决,有踩过坑的可以说一下。

    3. 使用net stop mongodb命令启动mongodb系统出错。 发生系统错误 1067。 进程意外终止。

      我在start的时候是正常启动的,但是在stop的时候报错了,但是最后还是正常stop了,上面所说的mongod.lock或者mongod.cfg我都没有,也不知道如何解决,知道怎么解决的大佬还请赐教,谢谢,鞠躬鞠躬!

    注:解决了之后一定要重启服务才会生效哦。

3.启动 

还是继续参考上一边文章
    1.命令行
    ## 开始服务
    net start mongodb

    ## 停止服务 nginxstop并不会关闭服务,需要使用kill,事实证明win10下stop是可以正常停止服务的
    net stop mongodb

    2.在mongodb的安装目录下,E:\Program Files\MongoDB\Server\3.4\bin 下的mongo.exe文件 ,也可以放在开始里面,右键固定在开始菜单就好了

    3.可视化工具robomongo

        下载传送门    选择 Robo 3T 即可,选择第二个绿色版本即可,下载下来解压直接运行.exe文件就可以了,当然了这个也可以放在开始,右键固定在开始菜单就好了。

Robo 3T 下载截图

4.管理员  

参考 NodeJS入门——准备工作(2)——MongoDB安装以及客户端Robomongo安装和使用
    1.重新打开一个命令行窗口,切换到Mongodb安装路径下bin文件夹内
    2.输入命令: mongo,输入命令 use  admin切换到admin数据库
    3.输入命令  db.addUser('admin','admin')  添加管理员账户 这是以前的版本
    新版本应使用 ad.createUser({user:"admin",pwd:"admin",roles:[]})  

    新版本的命令参考

5.数据库操作

使用robo3T robomongo工具
    1.创建和删除数据库
        可以使用图形界面右键create database创建数据库,右键Drop Database删除数据库
        也可以使用命令行来操作:
            1.创建数据库gomall:  use gomall    
                                  db
            2.删除数据库gomall:use gomall
                                db.dropDatabase()
    2.数据库操作命令:
        先打开shell脚本编写界面
        1.insert:
            命令:db.表名.insert(数据); 
            例子:db.products.insert({name:"iphone",price:1988});
            说明:insert操作会自动创建products表,_id,是mongodb自已生成的,每行数据都会存在,默认是ObjectId,可以在插入数据时插入这个键的值(支持mongodb支持的所有数据类型)
            查看数据:db.getCollection('products').find({});
            3.2 版本后还有以下几种语法可用于插入文档:
            db.collection.insertOne():向指定集合中插入一条文档数据
            db.collection.insertMany():向指定集合中插入多条文档数据
        2.save
            命令:db.表名.save.(数据);
            例子:db.proctus.save({_id:2,name:"HuaWei P10",price:2999});
            说明:_id可以自已插入、一个表中不一定要字段都相同,虽然insert和save方法都可以插入数据,当默认的“_id”值已存在时,调用insert方法插入会报错;而save方法不会,会更新相同的_id所在行数据的信息。
        3.批量添加
            for(var i = 0; i < 5; i ++) db.users.save({'_id':i,'name':'zhangguo'+i,'age':i+8});
            for(let i = 0; i < 5; i ++) db.users.save({'_id':i,'name':`zhangguo${i}`,'age':i+8});
        4.查询数据
            1.查询集合中所有数据
                命令: db.集合.find();
                例子:db.users.find({name:'zhangguo0'});
                     db.getCollection('users').find({}); 
                     db.users.find({});
                     db.users.find();
                其中,例子的后面三种写法是相同的结果
            2.按条件查询(支持多条件)
                命令:db.集合.find(条件);
                例子:db.users.find({name:'zhangguo0',age:9})
                说明:对象中的条件要求同时成立
            3.查询第一条(支持条件)
                命令:db.集合.findOne(条件);
                例子:db.users.findOne({name:'zhangguo0'});
            4.限制数量
                命令: db.集合.find().limit(数量);
                例子: db.users.find({}).limit(3); 或 db.users.find().limit(3);  结果一样
            5.跳过指定数量
                命令: db.表名.find().skip(数量);
                例子: db.users.find({}).skip(3); 
                      db.users.find({}).skip(2).limit(2);
            6.比较查询

                 不同类型不会作比较,string和number不会作比较

                比较查询的语法参考


                1.等于:$eq
                    格式:{<key>:<value>}
                          {<key>:{$eq:<value>}}
                    例子:db.users.find({age:10});
                          db.users.find({age:{$eq:10}});
                    说明:这两种格式的结果是一样的
                2.大于: $gt 
                    格式:{<key>:{$gt:<value>}}
                    例子:db.users.find({age:{$gt:10}});
                3.大于等于: $gte
                    格式:{<key>:{$gte:<value>}}
                    例子:db.users.find({age:{$gte:10}});
                4.小于: $lt
                    格式:{<key>:{$lt:<value>}}
                    例子:db.users.find({age:{$lt:10}});
                5.小于等于: $lte
                    格式:{<key>:{$lte:<value>}}
                    例子:db.users.find({age:{$lte:10}});
                6.不等于: $ne
                    格式:{<key>:{$ne:<value>}}
                    例子:db.users.find({age:{$ne:10}});
            7.查询数量
                语法:db.表名.find().count();
                例子:db.users.find({}).count()
            8.排序
                 语法:db.表名.find().sort({"字段名":1});
                 例子:db.users.find({}).sort({}) 不能写成db.users.find({}).sort()会报错 "Failed to parse: sort: undefined. 'sort' field must be of BSON type object."
                            db.users.find({}).sort({age:-1,name:1});
                说明:1:表示升序;-1:表示降序;db.users.find({}).sort({}) 什么都不传按默认排序,默认是_id升序排序
           9.指定字段返回
                语法:db.表名.find({},{"字段名":0});
                例子:db.users.find({age:{$gt:9}},{_id:0,age:1,name:1});
                说明: 参数 1:返回 0:不返回
        5.修改
            1.修改符合条件的第一条:update
                语法:db.集合.update({"条件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});
                例子:db.users.update({age:{$eq:9}},{$set:{age:100}});
                      db.users.update({age:9},{$set:{age:100}});
                说明:这两种格式的例子结果是一样的。前面save在_id字段已存在是就是修改操作。
            2.修改多条:updateMany
                例子: db.users.updateMany({age:{$gt:10}},{$set:{age:20}});
        6.删除
            语法:db.集合.remove(条件);
            例子:db.users.remove({age:{$gte:10}});  // 删除年龄>=10岁的数据

6.node.js访问Mongodb

    前提:先用nodejs新建一个简单的项目

    在当前项目中引入mongodb,可以不用全局安装的。

       npm install mongodb --save

    在项目的根目录下新建一个db.js文件,使用Node.js操作MongoDB。写完之后运行 node db.js 即可。

下面附上Node.js操作MongoDB的完整代码。主要主义的点是2.x和3.0以上的版本api接口有一点出入

// 引入客户端mongodb模块,获得客户端对象
const MongoClient = require('mongodb').MongoClient;
// 连接字符串
const DB_CONN_STR = 'mongodb://localhost:27017/gomall';

// 添加数据
const insertData = function (db, callback) {
  // 获得指定的集合
  let collection = db.collection('users');
  // 插入数据
  let data = [{
    _id: 9,
    name: 'rose',
    age: 23
  }, {
    _id: 10,
    name: 'mark',
    age: 24
  }];

  // collection.insert(data, function (err, result) {  // mongodb 2.x的写法 
  collection.insertMany(data, function (err, result) {
    // 如果存在错误
    if (err) {
      console.error('Error:', err);
      return;
    }

    // 调用传入的回调方法,将操作结果返回
    callback(result);
  });
}

// 修改数据
const updateData = function (db, callback) {
  // 获得指定的集合
  let collection = db.collection('users');
  // 要修改数据的条件,>=10岁的用户
  let where = {
    age: {
      $gte: 10
    }
  };
  // 要修改的结果
  let set = {
    $set: {
      age: 95
    }
  };

  collection.updateMany(where, set, function (err, result) {
    // 如果存在错误
    if (err) {
      console.error('Error:', err);
      return;
    }
    // 调用传入的回调方法,将操作结果返回
    callback(result);
  })
}

// 查询数据
const findData = function (db, callback) {
  let collection = db.collection('users');
  let where = {
    age: {
      $eq: '22'
    }
  };
  let set = {
    name: 1,
    age: 1
  };

  collection.find(where, set).toArray(function (err, result) {
    if (err) {
      console.error('Error:', err);
      return;
    }
    callback(result);
  });

  // 删除数据
  const deleteData = function (db, callback) {
    let collection = db.collection('users');
    let where = {
      age: {
        $eq: '21'
      }
    };
    collection.remove(where, function (err, result) {
      if (err) {
        console.error('Error:', err);
        return;
      }
      console.log(result);
      callback(result);
    })
  }



}

//使用客户端连接数据,并指定完成时的回调方法
// MongoClient.connect(DB_CONN_STR, function (err, db) {  // 2.x的写法
MongoClient.connect(DB_CONN_STR, {
  useNewUrlParser: true
}, function (err, client) {  3.0的写法
  if (err) {
    console.error('数据库连接失败');
    return;
  }
  console.log('连接成功');
  // 执行插入数据操作,调用自定义方法
  let db = client.db('gomall'); // 3.0的写法
  insertData(db, function (result) {
    // 显示结果
    console.log(result);
    // 关闭数据库
    client.close();
  });

  updateData(db, function (result) {
    // 显示结果
    console.log(result);
    client.close();
  });

  findData(db, function (result) {
    console.log(result);
    client.close();
  });
  deleteData(db, function (result) {
    console.log(result);
    client.close();
  })
});

原文地址

感谢:

1. https://www.cnblogs.com/best/p/6212807.html

2.https://www.cnblogs.com/zhaord/p/4229001.html

3.https://blog.csdn.net/u010523770/article/details/54599548

4.http://www.runoob.com/mongodb/mongodb-query.html

是你们在我黑暗的路上打开了一盏路灯,谢谢!

以上就是我的踩坑记录,愿对你也有所帮助。

愿圣光与你同在

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要安装 MongoDB 数据库和 Node.js 运行环境。 然后,创建一个新的文件夹,命名为 myapp,进入该文件夹,打开终端窗口,输入以下命令,初始化项目: ``` npm init ``` 按照提示输入项目信息,初始化完成后,输入以下命令安装 Express 和 Mongoose 模块: ``` npm install express mongoose --save ``` 接下来,创建一个名为 server.js 的文件,输入以下代码: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const app = express(); // 配置 bodyParser 解析 POST 请求的数据 app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); // 连接 MongoDB 数据库 mongoose.connect('mongodb://localhost/myapp', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB Connected...')) .catch(err => console.log(err)); // 定义用户模型 const UserSchema = new mongoose.Schema({ email: String, password: String }); const User = mongoose.model('User', UserSchema); // 注册接口 app.post('/signup', (req, res) => { const { email, password } = req.body; // 检查是否已存在该用户 User.findOne({ email }) .then(user => { if (user) { return res.status(400).json({ msg: '该用户已存在' }); } // 创建新用户 const newUser = new User({ email, password }); newUser.save() .then(user => res.json(user)) .catch(err => console.log(err)); }); }); // 登录接口 app.post('/login', (req, res) => { const { email, password } = req.body; // 检查用户是否存在 User.findOne({ email }) .then(user => { if (!user) { return res.status(404).json({ msg: '该用户不存在' }); } // 验证密码是否正确 if (user.password !== password) { return res.status(400).json({ msg: '密码错误' }); } // 登录成功 res.json({ msg: '登录成功' }); }); }); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server started on port ${port}`)); ``` 以上代码实现了一个简单的注册和登录接口,使用了 Express、Mongoose 和 BodyParser 模块。 最后,输入以下命令启动服务器: ``` node server.js ``` 访问 http://localhost:5000 就可以测试接口了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值