无法从Express中的MongoDB检索数据

时间:2018-04-13 12:12:42

标签: node.js mongodb express

我正在尝试编写一个简单的代码来从Express中的MongoDB中获取一些数据。 以下是我的代码:

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/mcart'
MongoClient.connect(url)
    .then(function (db) { 
        console.log(db)
    })
    .catch(function (err) {})

这给了我一个JSON。但是,当我尝试从中访问数据时,我收到错误"db.collection" is not a function

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/mcart'
MongoClient.connect(url)
    .then(function (db) { 

        var cursor=db.collection("product_catalog").find();
        cursor.each(function(err, doc) {
            console.log(doc);
        });
    })
    .catch(function (err) {console.log(err)})

我哪里错了?

3 个答案:

答案 0 :(得分:2)

使用hasNext()。它将移动到光标中的下一个doc,直到它到达结尾。在查询集合之前还要获取数据库名称

var DbName = db.db("databaseNameHere");
var cursor = DbName.collection("product_catalog").find();

while (cursor.hasNext()) {
   console.log(tojson(cursor.next()));
}

将您的代码更改为:

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/mcart'
MongoClient.connect(url)
.then(function (db) { 
    console.log("Before")
    var DbName = db.db("databaseNameHere");
    var cursor=DbName.collection("product_catalog").find();
    while (cursor.hasNext()) {
      console.log(tojson(cursor.next()));
    }
    console.log("after")
})
.catch(function (err) {})

答案 1 :(得分:1)

当您使用^3.0.x时,这是连接和执行查询的方式。

使用版本为^3.0.x的MongoDB nodejs驱动程序,将客户端对象作为回调函数参数。

MongoClient.connect('mongodb://localhost:27017', (err, client) => {
  if(err)
     throw err
 // Client returned
 var db = client.db('mcart');
 db.collection("product_catalog").find();
 ...
});

您正在采用的方式是旧的方式,在2.x版本中使用,它将db对象作为回调函数的参数。

详细了解更改日志here

答案 2 :(得分:0)

我尝试了下面的代码,这很好用。这段代码基本上是另外两个答案的组合。只是将来发布给其他人。

Calendrier.class.getResourceAsStream("/resources/villes.csv" )