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

时间:2017-05-08 15:57:54

标签: mongodb meteor meteor-collections

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

我明白了:

[]

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

期待您的帮助。

1 个答案:

答案 0 :(得分: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发布 - 订阅系统here的信息。基本上,您必须在服务器端代码中publish集合

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

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