检索集合时出现MongoDB错误

时间:2018-01-25 14:03:00

标签: node.js mongodb

我在Node.js应用程序中从数据库中获取集合时遇到问题。我正在使用Mongodb 3.6。

我就是这样设置的:

toQPos "I"= One
toQPos "" = One
toQPos ('L':xs) = (DL (toQPos xs))
toQPos ('R':xs) = (NR (toQPos xs))

toQ "0"= Zero
toQ ('-':xs) = (Qneg (toQPos xs))
toQ ('+':xs) = (Qpos (toQPos xs))
toQ (x:xs) = (Qpos (toQPos (x:xs)))

在主文件中我做:

*Quadratic> lazy_plus_ "0" "0"
"0"
*Quadratic> lazy_plus_ "+R" "+I"
"RR"

我可以在日志中看到var moment = require('moment'); var MongoClient = require('mongodb').MongoClient; /* =========================================================================== DB setup =========================================================================== */ var state = { db: null, } function get() { return state.db; } exports.connect_database = function(done) { if (state.db) return done() MongoClient.connect(process.env.DATABASE_URL, function(err, db) { if (err) return done(err) state.db = db done() }) } /* some other functions ... */ exports.return_collection = function(collection_name, callback) { var result_array = []; var collection = get().getCollection(collection_name); var result = collection.find() result.forEach(function(res) { result_array.push(res); }, function(error) { console.log("error: ") console.log(error); if (!error) callback(result_array); }); } 提示符,因此连接正常。之后我尝试调用一些函数来从db中添加/检索数据,我得到错误:

'use strict';

// LIB IMPORTS
var env                     = require('node-env-file');
env(__dirname + '/.env');

// LOCAL IMPORTS
var aux                     = require('./modules/aux.js');
var scheduler               = require('./modules/scheduler.js');
var Bot                     = require('./modules/bot.js');

/*
  ===========================================================================
                DB setup
  ===========================================================================
*/

aux.connect_database((err) => {
    if (err) {
        console.log('Unable to connect to Mongo.')
        process.exit(1)
    } else {
        console.log('Connected to db.');
    }
})

如果我尝试打印state.db变量,我会得到以下结果:

Connected to db.

我错过了什么?在mongo控制台中,一切看起来都很好:

TypeError: get(...).getCollection is not a function
    at Object.exports.return_collection

1 个答案:

答案 0 :(得分:1)

我在API documentation中找不到任何名为getCollection的函数用于Node.js MongoDB本机驱动程序。通常使用collection('mycoll')获取集合。所以你可以改写这一行:

var collection = get().getCollection(collection_name);

var collection = get().collection(collection_name);

请注意,如果您使用v3.0或更高版本的驱动程序,则还必须修改connect函数。对连接函数进行了一些更改(请参阅here)。回调现在返回客户端对象而不是db对象。因此,您必须将功能更改为:

exports.connect_database = function(done) {
    if (state.db) return done()
    MongoClient.connect(process.env.DATABASE_URL, function(err, client) {
        if (err) return done(err);
        state.db = client.db('database_name');
        done();
    })
}

请注意'database_name'字符串。它应该是您的数据库的名称。