Meteor:过滤嵌套属性上的发布

时间:2014-01-31 19:32:39

标签: javascript mongodb collections meteor

我有一个简单的出版物:

return Companies.find({}, {fields: {'myField1': 1, 'myField2': 1}});

在我的Companies个集合中,对于每个公司,我都有一个数组customers和一个数组managers。那些数组包含具有'_id'和各种其他属性的对象。

对于可视化,可以按如下方式添加新公司:

Companies.insert({
  customers: [{_id: <userId>, otherProp: <data>}, ...],
  managers: [{_id: <userId>, otherProp: <data>}, ...]
});

_id字段是用户集合中相应用户的ID。

我想只返回那些可以在customers数组的对象(或者管理器数组中,根据用户)找到用户的_id的公司。

这可能是一个mongo问题,但我不确定。 =&GT;在文档中,他们提到了mongo选择器:http://docs.meteor.com/#selectorshttp://docs.mongodb.org/manual/reference/operator/query/)但我无法弄清楚如何在我的案例中使用它。

1 个答案:

答案 0 :(得分:8)

我看来你可以做到:

Companies.find({'customers._id': this.userId}, {fields: {'stores': 1, 'customers': 1}});

这将在数组内搜索。

但是现在,如何完成过滤器并仅返回客户的信息而不是公司所有客户的信息?

答案再次出现在mongo doc中!

我似乎可以在字段上添加投影。 (http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/#proj._S_elemMatch

使用适当过滤器的最终请求是: return Companies.find({'customers._id': this.userId}, {fields: {'stores': 1, 'customers': { $elemMatch: { _id: this.userId } }}});

(最后我没那么努力,但如果我的回答可以帮助某人...... :))