模板中的多个集合查询

时间:2013-01-10 06:01:11

标签: meteor

所以我有这个:

Template.cards.cards = function () {
  var deck = Deck.findOne({active: 1});
  var cards = Cards.find({deck_id: deck['_id']}).fetch();
  return cards;
}

但是“deck”返回undefined,即使从浏览器控制台调用相同的查询返回结果。

我觉得这是一个反应性问题,我实现这个目标的方式存在根本性的错误。感觉就像是一种非常关系的方式,我也是非关系数据存储的新手。我觉得我的方式可能会有一些根本性的错误,但我是Meteor的新手,我已经浏览了文档,但找不到我可能出错的地方。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果您在启动时尝试立即访问Deck订阅,则可能尚未加载数据。您可以使用subscribe方法中的回调来确保您拥有数据:

Meteor.subscribe("deck", function () {
    Session.set("activeDeck", 1);
};

Template.cards.cards = function () {
    var deck = Deck.findOne({ active: Session.get("activeDeck") });
    var cards = Cards.find({ deck_id: deck['_id'] }).fetch();
    return cards;
};

也许您想要更改此选项以订阅decks,然后在会话中存储套牌ID,而不仅仅是活动旗帜。

希望这有帮助。

答案 1 :(得分:0)

[1] 首先,检查您传递的active数据类型。如果是字符串,那么{active: 1}将导致false,并且查询将不返回任何结果。 deck将保持undefined

[2] 尝试findOne的替代方式:Deck.find({active: 1}).fetch()[0];这将返回与Deck.findOne({active: 1});相同的结果

[3] findOne()find().fetch()[0]返回具有属性的对象,并且引用对象属性的有效方式为{{ 1}},所以将objectName.propertyName替换为deck['_id']

中的deck._id