我在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
答案 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'
字符串。它应该是您的数据库的名称。