我正在尝试从集合中获取文档,但它似乎无法正常工作。
当我使用find()。fetch()时,它只返回一个空数组。我的代码如下。
var users = new Mongo.Collection("users");
console.log(users.find());
var userRecord = users.find().fetch();
var returnUserRecord = {};
if (userRecord.length >0){
returnUserRecord = {username:userRecord.username, loginHash:userRecord.loginHash};
console.log("if statement is not complete and the value of the return variable is");
console.log(returnUserRecord);
}
return returnUserRecord
我已经直接检查了数据库,并注意到集合中确实存在一个文件:
meteor mongo
如果它有所不同,所有这些代码都在服务器js文件中,并且是从客户端调用的:Meteor.Methods()/ Meteor.call()
我使用来自客户端的新数据创建了另一个集合,并在选择了正确的数据库并运行命令之后:
meteor:PRIMARY> db.newCollection1.find()
我得到:
{ "_id" : ObjectId("55d1fa4686ee75349cd73ffb"), "test1" : "asdasd", "test2" : "dsadsa", "test3" : "qweqwe" }
所以这确认它在数据库中可用,但在客户端控制台中运行以下内容仍然不会返回结果。 (已安装autopublish。我尝试删除自动发布并进行了相应的更改以订阅该表,但这也没有用。)
var coll = new Meteor.Collection('newCollection1');
coll.find().fetch()
这返回了一个空数组。我也使用以下方法在server.js代码上尝试了相同的内容:
meteor debug
但我仍然得到一个空数组。有谁知道我在这里做错了什么?
解决方法是在Meteor对象上下文中创建集合变量。这样就可以从Meteor上下文中访问它。
即
Meteor.coll = new Meteor.Collection('newCollection1');
Meteor.coll.find().fetch();
我希望这有助于某人。根据您的代码,您可能希望使用不同的上下文。
答案 0 :(得分:2)
您不必等待此订阅完成,因此您将获得空数组。
问题是你将用户变量连接到"用户"收集,当你打电话给它时,它还没有被数据污染(如果你不想使用订阅,那么也许可以使用帮助器 - 它是被动的,所以它会在被替换时返回正确的值完成)
答案 1 :(得分:1)
您是否在某处订阅了users
集合?
if (Meteor.isServer) {
Meteor.publish("users", function(){
return Users.find({})
});
}
if (Meteor.isClient) {
Meteor.subscribe("users");
}