db.collection.find()如何获取文件数?

时间:2017-08-22 15:12:29

标签: node.js mongodb heroku

我正在尝试使用带有MongoDB / mLab的Node.js / Heroku构建一个基本应用程序,其中每次运行时都应该将记录添加到集合中。以下是相关代码:

.........

app.get('/', function(req, res) {
  //res.status(200).send('I dream of being a website.  Please star the parse-server repo on GitHub!');
  topDisplayFunc("index", res);
});

.........


function topDisplayFunc(displayPage, response) {
  MongoClient.connect(databaseUri, function(err, db) {
    if (err) throw err;

    db.collection('XCollection', function (err, collection) {
      collection.find().toArray(function(err, items) {
        if(err) throw err;

        response.render('pages/' + displayPage, {
          dataArray: items
        });

        collection.insert({number: collection.count}, function (err) {
          if(err) throw err;
          db.close();
        });
      });
    });
  })  ;
}

我首先从集合列表中删除XCollection。

第一次访问页面XCollection是在里面创建的,XCollection则包含一个文档,如下所示:

{
    "_id": {
        "$oid": "544e6f91d22e2e001171d117"
    }
}

第二次访问时,创建了另一条记录,XCollection随后又包含一个文档:

{
    "_id": {
        "$oid": "544e6f92e22e2e001171d118"
    }
}

可以看出,字段编号没有出现。

如果我改变这行代码:

collection.insert({number: collection.count}, function (err) {

到这一个:

collection.insert({number: collection.count()}, function (err) {

然后添加的文档更改为:

{
    "_id": {
        "$oid": "544e6f93e22e2e001171d119"
    },
    "number": {}
}

这次显示字段编号,但没有值。

代码应该在第一次运行时添加一个包含0的文档,下一次添加1,然后是2,然后是3 ......等等... 但它不起作用。每次在新创建的文档中只添加一些垃圾。我应该改变什么? 我需要说我尝试过的都失败了。

2 个答案:

答案 0 :(得分:1)

您正在关闭数据库连接,而不等待insert完成。

collection.insert({number: collection.count}, function (err) {
  // err handling...
  db.close()
});

答案 1 :(得分:1)

在尝试了大量的可能性并在网上搜索了一些稍微不同的方法来解决问题后,我最终找到了解决方案。如果它可能对其他人有用,我把它放在这里。

function topDisplayFunc(displayPage, response) {
  MongoClient.connect(databaseUri, function(err, db) {
    if (err) throw err;

    let theCollection = db.collection('XCollection');
    theCollection.count().then((count) => {
        theCollection.insert({number: count}, function (err) {
          if(err) throw err;

          db.collection('XCollection', function (err, collection) {
            collection.find().toArray(function(err, items) {
              if(err) throw err;

              response.render('pages/' + displayPage, {
                dataArray: items
              });

              db.close();
            });
          });
        });
    });
  });
}

如果有人有一些有趣的评论。请随意这样做。