Meteor / Mongo'getOne'函数返回“undefined”

时间:2017-10-29 15:59:11

标签: mongodb meteor

我(好奇地)是一个初学者,第一篇文章。我正在用Meteor创建一个flashcards项目。我有一个名为“cardsets”的数据库,其中包含许多与此类似的文档:

{ "_id" : "asdfg00724", 
"setTitle" : "Les animaux", 
"vocab" : [ 
[ "the dog", "le chien" ],
[ "the cat", "le chat" ], 
[ "the rabbit", "le lapin" ], 
[ "the horse", "le cheval" ] ] }

我要做的是从集合中访问单个文档,并将文档中的每个字段分配给同名变量,并将“vocab”字段作为数组引入。

我有一个/imports/api/cardsets.js,其中包含:

import { Mongo } from 'meteor/mongo';
export const Cardsets = new Mongo.Collection('cardsets');

/server/main.js包含以下行:

import '../imports/api/cardsets.js';

/client/main.js文件包含以下行:

import { Cardsets } from '/imports/api/cardsets.js';

在/client/main.js文件中,我可以直接将新文档“插入”数据库中,因此我知道可以在main.js中访问Cardfiles const:

Cardsets.insert( {language: "Chinese", course: "CHIN102"});

按预期工作。 (这仅用于测试)。但是,我没有用“findOne”做过任何结果:

var asdf = Cardsets.findOne( { _id : "asdfg00724"});
console.log("asdf = "+asdf);

在控制台中生成“asdf = undefined”。

如果我在浏览器控制台中键入“Cardsets.find({})。fetch()”,我会收到错误:“Cardsets未定义。”

我也试过这个:

Cardsets.findOne({ _id : "asdfg00724"}, function(err, document) {
     console.log(document.name);
     });

但是这会产生一个巨大的错误,其中包含“匹配错误:失败的Match.OneOf,Match.Maybe或Match.Optional验证”文本。

我意识到这可能是一件非常容易让我失踪的事情,但在不停地工作了很多天后,我觉得是时候寻求帮助了。

1 个答案:

答案 0 :(得分:0)

  1. find()findOne()不接受回调作为参数,因此您的巨大错误。
  2. 您的变量(包括集合)将无法在控制台中使用,除非您位于定义了这些变量的函数内的断点处,
  3. 您很可能在客户端通过pub-sub从服务器收到数据之前尝试访问Cardsets。实施实际的出版物和订阅后,您将能够查看.ready()订阅状态,以了解您的数据何时可用。
相关问题