【发布时间】:2015-05-19 20:03:11
【问题描述】:
我的收藏是在 collections.js 中创建的
portfolioCategories = new Mongo.Collection('portfoliocategories');
然后在subscriptions.js中订阅
Meteor.subscribe('portfoliocategories');
并发表在publications.js中
Meteor.publish('portfoliocategories',function(){
return portfolioCategories.find();
});
如果我使用 db.portfoliocategories.find() 从服务器查询 Mongo 我会得到
{ "_id" : "W9AeauCpMgPw2j5hf", "title" : "商业设计", "slug" : "commercial-design", "image" : "https://url/9c3ba46d-c09a-4a7d-ac40-5752fc24ad2c.jpg" }
然而,从客户端和 Ironrouter 中,find 什么都没有返回。例如,如果我在控制台中输入:
portfolioCategories.find({'_id':'W9AeauCpMgPw2j5hf'});
我会得到一个带有未定义键值的 LocalCollection.Cursor:
_selectorId: 未定义
_transform: null
集合:LocalCollection
字段:未定义
限制:未定义
如果我尝试将其作为数据返回,那么在 Iron-router 中也会发生同样的事情。但是,如果我使用 findOne,我会得到文档。
portfolioCategories.findOne({'_id':'W9AeauCpMgPw2j5hf'})
Object { "_id" : "W9AeauCpMgPw2j5hf", "title" : "商业设计", "slug" : "commercial-design", "image" : "https://url/9c3ba46d-c09a-4a7d-ac40-5752fc24ad2c.jpg" }
我的问题是我需要返回所有具有相同标题的项目。因此,findOne() 不是一个合适的解决方案。
我错过了什么?
【问题讨论】:
-
find 返回一个游标,您可以在游标上调用
fetch来获取文档数组。可以给出完整的答案,详细说明您希望如何使用这些文档。 -
那么正确的语法更像
portfolioCategories.find().fetch()吗? -
然而,另一个好奇心是我正在尝试做的工作适用于其他模板。例如
featuredItems: function () { return projectsPortfolio.find({'featured':true}); }工作得很好,而且应该如此。 -
(a) 是的,如果你想要一个文档数组,这就是语法,(b) 是的,模板接受光标和数组作为输入。
-
感谢您与我一起解决这个问题,我的橡皮鸭没有帮助。我将提供一个后续答案,因为真正的问题是我对 Iron-router 的数据对象和模板助手的理解存在差异。
标签: javascript mongodb meteor iron-router