node.js连接MongoDB数据成功之后,抛出错误,db.collection is not a function

node.js代码,显示连接数据库成功,却报错db.collection is not a function

/**
 * Created by 村中长相较好的男子 on 2018/1/3.
 */
//引入mongodb模块,获得客户端对象
var MongoClient = require('mongodb').MongoClient;
//连接字符串
var DB_CONN_STR = 'mongodb://localhost:27017/gomall';    

//定义函数表达式,用于操作数据库并返回结果
var insertData = function(db, callback) {  
    //获得指定的集合 
    var collection = db.collection('users');
    //插入数据
    var data = [{_id:7,"name":'rose',"age":21},{_id:8,"name":'mark',"age":22}];
    collection.insert(data, function(err, result) { 
        //如果存在错误
        if(err)
        {
            console.log('Error:'+ err);
            return;
        } 
        //调用传入的回调方法,将操作结果返回
        callback(result);
    });
};

//使用客户端连接数据,并指定完成时的回调方法
MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("连接成功!");
    //执行插入数据操作,调用自定义方法
    insertData(db, function(result) {
        //显示结果
        console.log(result);
        //关闭数据库
        db.close();
    });
});

代码确定是没错的,连数据库成功,那么问题就出在插入操作上,但插入的代码检查了也是没问题的。最后怀疑是模块出了问题。版本问题。

百度得知:这个错误是出在mongodb的库中,在nodejs里的写法和命令行中的写法不一样3.0的api已经更新和以前的版本不不一样,我们在npm中没指定版本号的安装就默认安装的是3.0版本。

可以参考3.0的api文档:http://mongodb.github.io/node-mongodb-native/3.0/api/

下面是我在网上收集的一个3.0的方法,能不能用我没试过,因为我用的是回滚版本的办法用老版本来操作。

// 3.0 以上 高版本语法

const express = require('express');
const router = express.Router();
const mongoClient = require('mongodb').MongoClient;
const assert = require('assert');
mongoClient.connect("数据库地址", function(err, client) { assert.equal(null, err);

// admin 为 数据库名称;
const db = client.db("admin");
// PASS 为 数据库里面的某一个集合;
const pass = db.collection('PASS');

pass.find({}).toArray(function(err, docs) {

assert.equal(err, null);

console.log(docs);
});

});

module.exports = router;

没准备好使用新版本在这里只需要把node_modules中mongodb的版本换为2.3.33vision即可解决;

1、在项目中找到package.json文件,这个文件中记录着我们项目的信息及引用的模块,我们找到mongodb将其版本2.3.33,就像我图片中那样,我原来是3.0.33版本的,图片是我改正后的版本


2、打开命令行: npm install,更新一下,我们就可以使用2.3.33版本的mongodb模块了

这时候在运行一下代码操作就成功了,成功解决问题。



  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值