0

我目前正在尝试学习如何使用 MongoDB。我尝试了两段相似但略有不同的代码,得到了完全不同的结果。我试图理解为什么会这样。

代码 1

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';

MongoClient.connect(url, { useNewUrlParser: true }, function(err,     client) {
    if (err) throw err

    var db = client.db('EmployeeDB')
    var cursor = db.collection('Employee').find()
    cursor.forEach(function(err, doc) {
        console.log(doc);
        console.log("Hello")

    });
    client.close()
});

代码 2

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';

MongoClient.connect(url, { useNewUrlParser: true }, function(err, client) {
    if (err) throw err

    var db = client.db('EmployeeDB')
    var cursor = db.collection('Employee').find()
    cursor.forEach(function(err, doc) {
        if (err) {
            console.log(err)
        } else {
            console.log(doc);
        }

    });

    client.close()
});

代码 1 返回“未定义\n 未定义\n 未定义”。但是,代码 2 返回了实际对象及其信息。我想知道为什么只有第二段代码可以正常工作。

4

1 回答 1

1

cursor.forEach() 的回调中只有一个参数,而不是两个。因此,在这两种情况下,都没有定义“doc”,只定义了“err”(这是实际的文档)。

因此,您的代码应该是:

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';

MongoClient.connect(url, { useNewUrlParser: true }, function(err, client) {
    if (err) throw err;

    var db = client.db('EmployeeDB');
    var cursor = db.collection('Employee').find();

    cursor.forEach(function(doc) {
        console.log(doc);
    });

    client.close();
});

来自 MongoDB 官方文档:

签名包含一个参数,该参数传递给当前文档以进行处理。

来源:https ://docs.mongodb.com/manual/reference/method/cursor.forEach/

于 2019-01-04T22:36:57.103 回答