Mongodb 如何访问Meteor中从Mongo查询的对象的属性
在Meteor.js框架中,我对mongo还很陌生。在这里,我使用MongoDB对象的ID查询了它。我试图访问属性“mana”,但它返回未定义的属性Mongodb 如何访问Meteor中从Mongo查询的对象的属性,mongodb,meteor,Mongodb,Meteor,在Meteor.js框架中,我对mongo还很陌生。在这里,我使用MongoDB对象的ID查询了它。我试图访问属性“mana”,但它返回未定义的属性 var skill = Skills.find({_id:Session.get("selected_skill")}); alert(skill);//This returns me "undefined" Skills.update(Session.get("selected_skill"), {$inc: {mana: 1}});
var skill = Skills.find({_id:Session.get("selected_skill")});
alert(skill);//This returns me "undefined"
Skills.update(Session.get("selected_skill"), {$inc: {mana: 1}});
你能告诉我在mongo中访问meteor属性的要求吗?谢谢
find
方法返回游标,而不是对象或数组。要访问对象,您需要从游标中获取它
var skill = Skills.find(Session.get('selected_skill')).fetch()[0];
或者直接使用findOne
:
var skill = Skills.findOne(Session.get('selected_skill'));
然后您可以像使用任何其他js对象一样使用它:
console.log(skill.mana);
skill._cache = {cooldown: true};
请记住,在客户端,像
find
这样的收集方法是非阻塞的。它们返回Meteor缓存中的任何内容,而不一定返回服务器端数据库中的内容。这就是为什么您应该始终在反应上下文中使用它们,或者确保在执行之前已获取所有数据(在熟悉Meteor之前,不要担心后者,从第一种方法开始)
此外,您需要记住,正因为如此,findOne
和find.fetch
可能会返回null
/空数组,即使对应的元素在db中(但尚未缓存)。如果你在反应函数中没有考虑到这一点,你会遇到错误
Template.article.slug = function() {
var article = Articles.findOne(current_article);
if(!article) return '';
return slugify(article.title);
};
如果我们没有使用If(!article)
退出函数,表达式article.title
将在第一次计算中引发错误,因为article
将未定义(假设它之前未缓存)
当您想从客户端更新数据库时,一次只能更改一个项目,并且必须通过其
\u id
引用该项目。这是出于安全原因。你的这句话还可以:
Skills.update(Session.get('selected_skill'), {$inc: {mana: 1}});
alert()
是一个函数,它返回undefined,无论您向它提供什么
alert(42); // -> undefined
通常,使用
console.log
进行调试比使用alert
进行调试要好得多,谢谢Hubert!!这对检索非常有帮助。您是否也知道使用外部sql查询工具连接Meteor生产数据库的方法?在这种情况下,我不是在看命令级编辑,谢谢你的回答,特别是解释了.find
提供了一个光标,而.findOne
没有