我在这里遇到一个奇怪的问题......
在我似乎成功地将一些数据插入我的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()
我明白了:
[]
谁能告诉我这里发生了什么?
期待您的帮助。
答案 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()
应该返回集合中的所有文档。