我将如何根据其子记录过滤一组记录。
假设我有一个集合Item
,该集合具有另一个名为Bag
的集合bagId
的字段。我想找到Items
上的某个字段与某个子句匹配的所有Bags
。
即db.Items.find( { "where bag.type:'Paper' " })
。我将如何在MongoDB中做到这一点。我了解我必须join
放在Bags上,然后在Item.bagId == Bag._id
我使用Studio3T将SQL GROUP BY
转换为Mongo聚合。我只是想知道是否有实际方法可以做到这一点。
我应该执行数据迁移以在每个Bag.type
文档中简单地包含Item
(不想养成每次我想要进行排序/过滤时都要不断进行模式更改的习惯的习惯) Items
和Bag
字段)。
使用类似https://github.com/meteorhacks/meteor-aggregate的名称(该语法尚不适用)
Grapher https://github.com/cult-of-coders/grapher我曾短暂地玩过,虽然很酷,但我不确定它是否能真正解决我的问题。我可以用它来将Bag.type
添加到返回的每个项目中,但是我看不出如何用Bag.type
来过滤每个项目。
这仅仅是使用NoSQL dbms的权衡之一吗?建议使用上面的哪个选项或还有其他想法?
谢谢
答案 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();
这将需要一些测试,以确定该解决方案的反应性是否仍是您期望的工作方式,并且它是否仍适用于较大的集合,而不是使用第一个解决方案并执行迁移。