Meteor Mongo未获取收集数据

时间:2015-08-24 08:39:20

标签: javascript node.js mongodb meteor

我正在尝试从集合中获取文档,但它似乎无法正常工作。

当我使用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()

编辑1

我使用来自客户端的新数据创建了另一个集合,并在选择了正确的数据库并运行命令之后:

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();

我希望这有助于某人。根据您的代码,您可能希望使用不同的上下文。

2 个答案:

答案 0 :(得分:2)

您不必等待此订阅完成,因此您将获得空数组。

您应该阅读thisthis以更好地理解它。

问题是你将用户变量连接到"用户"收集,当你打电话给它时,它还没有被数据污染(如果你不想使用订阅,那么也许可以使用帮助器 - 它是被动的,所以它会在被替换时返回正确的值完成)

答案 1 :(得分:1)

您是否在某处订阅了users集合?

if (Meteor.isServer) {
  Meteor.publish("users", function(){
     return Users.find({})
  });
}

if (Meteor.isClient) {
  Meteor.subscribe("users");
}