NodeJs连接mongodb数据库成功之后报db.collection is not a function错误-已解决

在nodejs操作mongodb显示数据库连接成功之后突然报了db.collection is not a function错误,引起这个错误的原因是你monodb库的版本和你nodejs操作数据的api版本不一致。那么解决这种问题的方法有两种,首先先看看代码:

解决办法一:

/**
    * Created by lenovoo on 2018/1/23.
    */
    var express = require("express");
    var MongoClient = require("mongodb").MongoClient;

    var app = express();

    app.get("/",function(req,res) {
        //连接数据库
        //假如数据库不存在,会自动创建一个数据库
    var url = "mongodb://localhost:27017/mongoTest";
    MongoClient.connect(url, function (err, db) {
        //db参数就是连接成功之后的数据库实体
        if (err) {
            console.log("数据库连接失败");
            return;
        }
        console.log("数据库连接成功");
        //2.x老版本写法
        var user = db.collection("user");
        user.insertOne({
            "username": "jmin",
            "age": 22,
            "sex": "男"
        }, function (err, result) {
            if (err) {
                res.send("插入数据失败");
                return;
            }
            db.close();
            res.end();
        });
    });

});
app.listen(3000);
一开始我是以这种写法来向数据库插入一条数据, 此时就报错了,来看看我的package.json中mongodb版本:

  "devDependencies": {
    "ejs": "^2.5.7",
    "express": "^4.16.2",
    "formidable": "^1.1.1",
    "mongodb": "^3.0.1",
    "silly-datetime": "^0.1.2"
  }
npm自动下载了最新版本3.0的库,而3.0中的写法跟2.x写法已经不一样了,so..........

附上3.0api:http://mongodb.github.io/node-mongodb-native/3.0/api/

那么此时你只需要下载

"mongodb": "^2.2.33",
即可使用(版本回退)。

解决方法二:
那么如果你要使用3.0版本的mongodb库,那么你就得用新的写法了。

/**
    * Created by lenovoo on 2018/1/23.
    */
    var express = require("express");
    var MongoClient = require("mongodb").MongoClient;

    var app = express();

    app.get("/",function(req,res) {
        //连接数据库
        //假如数据库不存在,会自动创建一个数据库
    var url = "mongodb://localhost:27017/mongoTest";
    MongoClient.connect(url, function (err, client) {
        //client参数就是连接成功之后的mongoclient(个人理解为数据库客户端)
        if (err) {
            console.log("数据库连接失败");
            return;
        }
        console.log("数据库连接成功");
        //3.0新写法
        var db = client.db("mongoTest");
        db.collection("user").insertOne({
            "username": "jmin呀",
            "age": 23,
            "sex": "男"
        }, function (err, result) {
            if (err) {
                res.send("插入数据失败");
                return;
            }
            db.close();
            res.end();
        })

    });

});
app.listen(3000);
此时就可以正常插入数据了:




  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
ybaseSQLAnywhere是Sybase公司开发的一种小型数据库产品,有单用户版和多用户版,Sybase Sql Anywhere (ASA)现在应用很广泛,主要用于单机版的管理系统中,如:“顶尖酒店管理信息系统” ,“浪潮财务软件(SQL Anywhere版)”及一些足浴、图书管理、汽修、会员系统等,数据库如:jd.db,LCCS.db,cwbase.db,wlda.db,leader.db,tctn_web.db,ais02.db,qxqp.db,muzu_jl.db, zl_pos.db,haird40.db等,因为ASA是在使用过程中,经常会出现损坏的情况,而市面上也没有ASA数据库修复工具,所以西西推出浪潮官方的修复单机版数据库sybase sqlanywhere的工具。 软件功能: 1.因为物理磁盘故障,如硬盘坏道或固件磁头损坏造成Sybase SQL Anywhere 数据库无法打开 2.由于在使用过程中突然断电造成的数据库无法打开 3.由于操作系统或其它方面的故障导致数据库无法打开 使用方法: 1、将dbrepair.exe复制到数据库目录下 例如:d:\cwdata,在dos方式下执行以下语句。 2、d:\cwdata>dbrepair -k d:\cwdata\cwbase1.db错误页号(xxxx)记下 3、d:\cwdata>dbrepair -z xxxx d:\cwdata\cwbase1.db OK,问题通过 手动命令恢复: 用Sybase提供的dbtranw.exe,DB32W.EXE,rtsqlw.exe等实用程序来完成恢复工作,步骤如下表。 步骤命令功能 : 1.Dbtranw -r-k-y mydb.logdb.sql把.log 文件的内容转换成的SQL语句 2.Attrib -r mydb.db 修改只读文件mydb.db的属性为可写 3.Attrib -r mydb.log
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值