为什么我的 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.
中的所有文档
我在这里遇到了一个奇怪的问题...
在我似乎成功地将一些数据插入我的 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.