【发布时间】:2015-11-17 14:46:10
【问题描述】:
我正在尝试从集合中获取文档,但它似乎不起作用。
当我使用 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" }
所以这确认它在数据库中可用,但是在客户端控制台中运行以下命令,仍然没有返回结果。 (安装了自动发布。我尝试删除自动发布并进行了适当的更改以订阅表格,但这也不起作用)。
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();
我希望这对某人有所帮助。根据您的代码,您可能希望使用不同的上下文。
【问题讨论】:
-
不应该是
return users.find().fetch();,基本上没有别的。您定义:var returnUserRecord = {}; return returnUserRecord;当然只是一个空对象。只有前一行(如图所示修改)实际上做了任何事情来检索集合数据。 -
您是否从您的应用程序中删除了
auto-publish包?如果是,请将其添加到您的应用程序中,并检查是否得到正确的结果;如果没有,在浏览器检查器中运行users.find().fetch()会得到什么? -
请查看我的编辑 1。我尝试添加和删除自动发布。当我删除自动发布时,我使用了以下 Ryan Wu 提供的信息。
标签: javascript node.js mongodb meteor