为什么我的 db.collection.insert 不起作用?

Why doesn't my db.collection.insert work?

我在这里遇到了一个奇怪的问题... 在我似乎成功地将一些数据插入我的 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()

我得到:

[]

谁能告诉我这是怎么回事?

期待您的帮助。

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

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

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

如果这仍然记录成功插入,那么您还没有订阅 collection,并且您已经删除了 autopublish 包。您可以阅读 Meteor publish-subscribe 系统 here。基本上,您必须 publish collection 在 server-side 代码中:

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

并且在服务器代码(或您的 js 控制台)中,您需要使用 Meteor.subscribe('reviews') 订阅 collection。现在调用 merchantReviews.find().fetch() 应该 return collection.

中的所有文档