您现在的位置是:首页 > 正文

node.js连接MongoDB数据库,db.collection is not a function完美解决

2024-04-01 05:58:02阅读 1

解决方法一、

mongodb数据库版本回退:

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

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

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

打开命令行在项目根路径下: npm install,更新一下,我们就可以使用2.3.33版本的mongodb模块了。

解决方法二、

nodejs连接mongodb新写法

1、封装数据库的增删改查的操作并向外暴露

module.exports = {

	//插入数据
	insertData : function(db, tableName, insertData, callback) {  
	    //连接到表 dynamic
	    var collection = db.collection(tableName);
	    
	    collection.insert(insertData, function(err, result) { 
        if(err)
        {
          console.log('Error:'+ err);
          return;
        }     
        callback(result);
	    });
	},
	//查询数据
	selectData : function(db, tableName, whereStr, callback) {  
    //连接到表  
    var collection = db.collection(tableName);
    collection.find(whereStr).toArray(function(err, result) {
	    if(err)
	    {
	      console.log('Error:'+ err);
	      return;
	    }     
	    callback(result);
	  });
	},
	//更新数据
	updateData : function(db, tableName, whereStr, updateStr, callback) {  
    //连接到表  
    var collection = db.collection(tableName);
    
    collection.update(whereStr,updateStr, function(err, result) {
      if(err)
      {
        console.log('Error:'+ err);
        return;
      }     
      callback(result);
    });
  },
  //删除数据
  delData : function(db, tableName, whereStr, callback) {  
	  //连接到表  
	  var collection = db.collection(tableName);
	  collection.remove(whereStr, function(err, result) {
	    if(err)
	    {
	      console.log('Error:'+ err);
	      return;
	    }     
	    callback(result);
	  });
	}
}

  
2、引入需要的包

let MongoClient = require('mongodb').MongoClient;
//连接字符串
let DB_CONN_STR = 'mongodb://localhost:27017/gomall';  
let database = require("./3.0_actiondb");//3.0_actiondb上述的文件名
let dbName = 'gomall';

//runoob是表的名称

MongoClient.connect(DB_CONN_STR, function(err, client) {
	    let whereStr = {}
	    console.log("连接成功!" + client);
	    let db = client.db(dbName)
	    database.selectData(db, "runoob", whereStr, function(result) {
	        console.log(result);
  				res.send(JSON.stringify(result));
	        client.close();
	    });
	});

  
总结:建议使用第二中方法,个人认为应该追随技术的更新,不断学习,不被社会淘汰。

 

转载于:https://www.cnblogs.com/detanx/p/nodeMongodb.html

网站文章

  • JS中第三方库

    网站:https://www.bootcdn.cn库:moment.js 日期处理类的库(体积较大) day.js处理日期的(体积较小)

    2024-04-01 05:57:18
  • 【java学习】进程、线程、程序

    【java学习】进程、线程、程序

    1,概念 (1)分类 ①守护线程(Daemon Thread) 用户线程可以通过System.exit(status)(status为0时表示正常退出,非0表示非正常退出)来退出JVM。 父线程是守护线程子线程默认为守护线程,父线程是用户线程子线程默认为用户线程。父线程在创建子线程后,启动子线程之前,可以调用Thread实例的setDaemon方法来修改线程属性。 当没有用户线程...

    2024-04-01 05:57:12
  • php程序怎么导入数据库,php 简单数据库导入程序[.sql文件]

    php 简单数据库导入程序[.sql文件]function insert_file($file,$replace=''){global $Charset;$readfiles=read...

    2024-04-01 05:57:03
  • python子进程模块subprocess详解与应用实例 之二

    1.2. Popen 对象 Popen类的实例有下列方法: 1. Popen.poll() 检查子进程是否已经结束,设置并返回返回码值。 2. Popen.wait() 等待子进程结束,设置并返回返回码值。 WARNING: 当使用 stdout=PIPE 或 stderr=PIPE 并且子进程生成了足够多的输出信息到管道,以至于管道阻塞,将会造成死锁。 使用 com

    2024-04-01 05:56:19
  • shell脚本之批量添加用户

    shell脚本之批量添加用户

    1 #/bin/bash 2 for i in {1..10};do 3 if id user$i &> /dev/null;then 4 echo "This user is exists" 5 else 6 adduser user$i &>/...

    2024-04-01 05:56:12
  • 优化JavaScript代码

    优化JavaScript代码

    我google一下,已有人翻译了此文.感觉比我翻译的要好!是译言站翻译的见www.yeeyan.com/articles/view/92135/47626/dz原文见:http://code.google.com/intl/zh-CN/speed/articles/optimizing-javascript.html不合适的地方,请大家指出来!希望对你有用!...

    2024-04-01 05:56:05
  • python将图片生成二进制的两种方式(java读取)

    文章目录tobytes()生成带格式的二进制 以程序中生成的词云图为例(方便测试,我把生成图片调小了) wc = WordCloud(font_path=font_path, scale=1, col...

    2024-04-01 05:55:27
  • 计算机控制与技术课程设计报告书,计算机控制技术课程设计书报告书.doc

    on二阶环节电压跟踪控制系统的设计(采用PC机、JK实验装置)专 业:自动化 专业班 级:2008 级 8(7)班组 员:姚 亮刘 凤罗 威 李 延 ...

    2024-04-01 05:55:19
  • python优化算法工具包_12种Python 机器学习 & 数据挖掘工具包,一定让你受益匪浅...

    python优化算法工具包_12种Python 机器学习 & 数据挖掘工具包,一定让你受益匪浅...

    作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。...

    2024-04-01 05:55:12
  • 数据挖掘-二手车价格预测 Task01:赛题理解

    数据挖掘-二手车价格预测 Task01:赛题理解

    数据挖掘-二手车价格预测 Task01:赛题理解 1.赛题概况 赛题以预测二手车的交易价格为任务,数据集来自某交易平台的二手车交易记录,总数据量超过40w,包含31列变量信息,其中15列为匿名变量。为...

    2024-04-01 05:55:05