6

我是 node.js 和 heroku 的新手,我构建了一个使用 node.js 并从 mongodb 实例中检索一些数据的小应用程序。我设置了整个东西,但我的问题是我认为 mongodb 存在一个简单的语法问题。

在启动应用程序时,我需要知道我的收藏中是否有任何东西,如果没有,而不是初始化它。我尝试调用 collection.count() 但返回未定义。

我试着这样做

mongo.connect(mongoUri, {}, function(err, database) {
  if(!err) {
      db = database;
      console.log("Connected to 'testdb' database, HERE");
      db.collection('tests', {safe:true}, function(err, collection) {
          if (err) {
              console.log("The 'tests' collection doesn't exist. Creating it ");
              populateDB();//This would work for the first time I install the app on heroku
          }
          else { //Collection exists, but nothing is in it, this is where I am lost
             console.log("now I am HERE");
             //I do not know how to mimic this piece of code
             //if((collection("tests").find().toArray.size() == 0 or empty or the equivalent of it) {
             //    populateDB();
             //}
             console.log((collection("tests").find().toArray.size()));
          }
      });
  }
  else {
      console.log("COULD NOT CONNECT TO MONGO: " + mongoUri);
  }
});

任何帮助表示赞赏。

4

2 回答 2

9

任何访问数据库中数据的 MongoDB 驱动程序方法(如counttoArray),通过回调函数参数而不是通过返回值异步向调用者提供结果,这样它们就不会阻塞单个 node.js 线程。

所以检查会是这样的:

collection.count(function (err, count) {
    if (!err && count === 0) {
        populateDB();
    }
});
于 2013-05-24T21:34:04.260 回答
1

很好的问题和很好的答案,但是!如果您有很多集合并且每个集合中有很多文档,这可能需要很长时间!我们只需要知道一个集合是否至少有一个项目然后我们可以跳过这个集合,它不是空的......在选项参数中使用 {limit: 1}

于 2021-10-28T10:32:33.103 回答