我将如何根据其子记录过滤一组记录。
假设我有一个集合Item
,其中包含另一个名为Bag
的集合bagId
的字段。我想找到所有Items
其中Bags
上的字段与某些子句匹配的地方。
即db.Items.find( { "where bag.type:'Paper' " })
。我将如何在MongoDB中做到这一点。我了解我必须在Bags上join
,然后在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的权衡之一吗?建议使用上述哪个选项,或者还有其他想法?
谢谢
最佳答案
您可以使用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();
如果此解决方案的反应性仍是您期望的工作方式,并且仍然适合于较大的集合,而不是采用第一个解决方案并执行迁移,则需要进行一些测试。