Meteor集合的find()方法无法检索到任何数据。

5

我正在学习Meteor教程:https://www.meteor.com/tutorials/blaze/collections

我定义了一个集合,

Tasks = new Mongo.Collection("tasks");

我已经向其中添加了两个项目,一个是直接使用meteor mongo命令行添加的,另一个则使用:

Tasks.insert({ text: "Testing JS", createdAt: new Date() });

这是在后端运行db.tasks.find()的结果:

{ "_id" : ObjectId("559e9569abbb64fe1d5fd89a"), "text" : "Hello world!", "createdAt" : ISODate("2015-07-09T15:38:17.742Z") }
{ "_id" : "obRN8Rcssa9yJqXzA", "text" : "Testing JS", "createdAt" : ISODate("2015-07-09T17:00:13.285Z") }

但是当我在前端运行Tasks.find({});时,结果为空。它只给了我一个很长的JSON,但没有来自数据库的数据。


你是否已经发布和订阅了集合,还是正在使用自动发布? - Christian Fritz
我现在正在使用autopublish。我正在尝试查看发布/订阅流程是否正常(我只是在按照教程操作,将来我很可能会使用发布/订阅)。 - Tim Zhukov-Khovanskiy
我刚刚尝试了删除自动发布并使用订阅/发布流程,但结果相同。 - Tim Zhukov-Khovanskiy
3个回答

3
在 Meteor 中,您可以通过调用 fetch 来查看由光标返回的文档。例如:
console.log(Tasks.find().fetch());

1
在客户端吗?如果是,那么你需要发布和订阅以便客户端有数据。 - David Weldon
2
是的。那么还有其他问题。我注意到在你的例子中,你使用了对象ID而不是字符串(Meteor的默认值)。你是在托管自己的数据库,而不是使用Meteor为你创建的默认数据库吗?如果是这样,我怀疑问题在于Meteor没有连接到它。 - David Weldon
我基本上是用“meteor create”命令直接运行了这个东西。在之前的帖子中,有人说当在“meteor mongo”中通过命令行添加记录时,它会将对象ID作为字符串使用。让我尝试从Meteor编程中删除记录,然后再添加一条记录。 - Tim Zhukov-Khovanskiy
1
我相信这是一些简单的问题,但我已经问了所有标准问题。你能在meteorpad上重现它或给我一个在github上的repo链接吗? - David Weldon
1
你没有发布游标。将你的发布修改为 return Tasks.find();。做出这个改变后,应用程序似乎工作正常。 - David Weldon
显示剩余9条评论

2

看你的代码,你没有发布任何内容:

if (Meteor.isServer) {
  Meteor.publish("tasks", function () {
    console.log(Tasks.find());
  });   
}

需要进行
if (Meteor.isServer) {
  Meteor.publish("tasks", function () {
    console.log(Tasks.find());
    return Tasks.find();
  });   
}

如果您使用自动发布,请删除它。


我更新了代码和存储库以发布数据,但仍然无法工作。我从自动发布切换过来,看看是否只是自动发布的问题,但结果还是一样。 - Tim Zhukov-Khovanskiy
我尝试将其删除并使用autopublish,但结果相同。 - Tim Zhukov-Khovanskiy

0
你在前端 .js 文件中导入了 collection 的 .js 文件吗?
import { Tasks } from '/your_path_goes_here/filename_goes_here.js';

如果尚未导入,请尝试以下操作:
  1. 添加发布

    if (Meteor.isServer) { Meteor.publish('tasks', function task() { return Task.find({}); }); }

  2. 在前端.js中进行订阅

    Meteor.subscribe('task');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接