0

我在这里遇到了一个奇怪的问题......在我似乎成功地将一些数据插入到我之后,我似乎db.collection无法让它反映使用db.collection.find().fetch().

在我插入 chrome 控制台的代码下方找到:

merchantReviews.insert({merchantScore: "5.5"}, function() {
console.log("Review value successfully inserted");
});

这产生:

"9sd5787kj7dsd98ycnd"    
Review value successfully inserted

我认为返回值"9sd5787kj7dsd98ycnd"表明数据库集合插入成功。然后当我运行时:

merchantReviews.find().fetch()

我得到:

[]

谁能告诉我这里发生了什么?

期待您的帮助。

4

1 回答 1

2

这里有两种可能性:要么插入在服务器上失败,即使它通过了客户端,或者你还没有订阅你的集合。

如果insert服务器失败(很可能是由于权限不足,如果您已删除insecure包但未声明任何collection.allow规则),客户端代码仍会返回预期的插入 ID(在您的情况下为"9sd5787kj7dsd98ycnd")。一旦服务器确认插入失败或成功,就会调用回调。如果失败,则使用单个错误参数调用回调。要抓住这一点,您可以像这样插入文档:

merchantReviews.insert({merchantScore: "5.5"}, function(error) {
  if (error) {
    console.error(error);
  } else {
    console.log("Review value successfully inserted");
  }    
});

如果这仍然记录成功插入,则您尚未订阅该集合,并且您已删除该autopublish包。您可以在此处阅读有关 Meteor 发布-订阅系统的信息。基本上,您必须在服务器端代码publish中收集:

Meteor.publish('reviews', function () {
  return merchantReviews.find();
});

在服务器代码(或您的 js 控制台)中,您需要使用Meteor.subscribe('reviews'). 现在调用merchantReviews.find().fetch()应该返回集合中的所有文档。

于 2017-05-08T16:11:25.813 回答