Mongo文档计数与console.log计数不同

时间:2015-12-23 15:10:13

标签: javascript mongodb meteor

进行一些实验,以掌握我学习如何编码的基础知识。整天都在弄乱一个方面,但无法弄明白。我相信它一定很简单,并且会感激任何帮助!

所以我创建了一个Mongo集合:

Posts = new Mongo.Collection('posts');

然后我在集合中添加了3个文档,每个文档有2个字段(名称和数量)。现在,当我在Google Chrome控制台中运行时:

Posts.find().count();

//returns '3' as expected

然而,当我从服务器运行以下代码时(如果它是客户端代码,它是否称为服务器?):

if (Meteor.isClient) {
  var c = Posts.find().count();
  console.log("The database documents count is " + c);
}

然后它出现在Chrome控制台上:

The database documents count is 0

是什么给出的?这是怎么回事?

提前致谢!!

1 个答案:

答案 0 :(得分:1)

工作原理:当您打开页面时,客户端根本没有数据。加载JS后,发布函数开始工作,一段时间后,当发布结束时,您在客户端上有数据。

所以当浏览器运行时:

if (Meteor.isClient) {
  console.log(Posts.find().count());
}

您的客户端没有数据,这就是您在控制台中看到0的原因。

然后你手动打开控制台并写Posts.find().count()。您需要一段时间才能打开控制台,编写Posts.find().count(),这次发布功能足以将所有数据发送到客户端,所以现在您在客户端上有数据,您将看到{{1}在控制台中。

您可以尝试此实验:

3

它会立即记录帖子数量,但延迟2秒,这应该足以让发布结束,您将在控制台中看到if (Meteor.isClient) { setTimeout(function() { console.log(Posts.find().count()); }, 2000); } 。您可以更改超时延迟,并了解服务器将帖子数据发送到客户端所需的时间。