流星MongoDB按子字段过滤父记录

时间:2020-01-29 19:50:23

标签: javascript database mongodb meteor nosql

我将如何根据其子记录过滤一组记录。

假设我有一个集合Item,该集合具有另一个名为Bag的集合bagId的字段。我想找到Items上的某个字段与某个子句匹配的所有Bags

db.Items.find( { "where bag.type:'Paper' " })。我将如何在MongoDB中做到这一点。我了解我必须join放在Bags上,然后在Item.bagId == Bag._id

处链接

我使用Studio3T将SQL GROUP BY转换为Mongo聚合。我只是想知道是否有实际方法可以做到这一点。

  1. 我应该执行数据迁移以在每个Bag.type文档中简单地包含Item(不想养成每次我想要进行排序/过滤时都要不断进行模式更改的习惯的习惯) ItemsBag字段)。

  2. 使用类似https://github.com/meteorhacks/meteor-aggregate的名称(该语法尚不适用)

  3. Grapher https://github.com/cult-of-coders/grapher我曾短暂地玩过,虽然很酷,但我不确定它是否能真正解决我的问题。我可以用它来将Bag.type添加到返回的每个项目中,但是我看不出如何用Bag.type来过滤每个项目。

这仅仅是使用NoSQL dbms的权衡之一吗?建议使用上面的哪个选项或还有其他想法?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用MongoDB的$in functionality。看起来像这样:

const bagsIds = Bags.find({type: 'paper'}, {fields: {"_id": 1}}).map(function(bag) { return bag._id; }); const items = Items.find( { bagId: { $in: bagsIds } } ).fetch();

这将需要一些测试,以确定该解决方案的反应性是否仍是您期望的工作方式,并且它是否仍适用于较大的集合,而不是使用第一个解决方案并执行迁移。