gpt4 book ai didi

mongodb - 你如何访问从 Meteor 中的 Mongo 查询的对象的属性

转载 作者:可可西里 更新时间:2023-11-01 09:11:35 24 4
gpt4 key购买 nike

我对 Meteor.js 框架中的 mongo 还很陌生。在这里,我使用它的 ID 查询了一个 MongoDB 对象。我正在尝试访问属性“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}});

请问meteor在mongo中访问属性有什么要求吗?谢谢

最佳答案

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 在缓存中的任何内容,不一定是服务器端数据库中的内容。这就是为什么您应该始终在 react 性上下文中使用它们,或者确保在执行之前已获取所有数据(在您熟练使用 Meteor 之前不要担心后者,从第一种方式开始)。

此外,您需要记住,正因为如此,findOnefind.fetch 可能会返回 null/空数组,即使当相应的元素在数据库中(但尚未缓存)时。如果您不在 react 函数中考虑到这一点,就会遇到错误。

Template.article.slug = function() {
var article = Articles.findOne(current_article);
if(!article) return '';
return slugify(article.title);
};

如果我们不使用 if(!article) 退出函数,表达式 article.title 将在第一次计算中引发错误,因为 article 将是未定义的(假设它之前没有被缓存)。


当你想从客户端更新数据库时,你一次只能改变一个项目,你必须通过它的_id来引用该项目。这是出于安全原因。你的线路没问题:

Skills.update(Session.get('selected_skill'), {$inc: {mana: 1}});


alert() 是一个返回 undefined 的函数,无论您输入什么。

alert(42); // -> undefined

通常,使用 console.log 进行调试比使用 alert 调试更好。

关于mongodb - 你如何访问从 Meteor 中的 Mongo 查询的对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18711135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com