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

假设我有一个集合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();

如果此解决方案的反应性仍是您期望的工作方式,并且仍然适合于较大的集合,而不是采用第一个解决方案并执行迁移,则需要进行一些测试。

10-02 20:35