Javascript Meteor MongoDB按子字段筛选父记录

Javascript Meteor MongoDB按子字段筛选父记录,javascript,database,mongodb,meteor,nosql,Javascript,Database,Mongodb,Meteor,Nosql,如何根据记录的子记录过滤一组记录 假设我有一个收集项目,其中有一个字段指向另一个名为bagId的收集包。我想查找Bags上的字段与某个子句匹配的所有项目 即db.Items.find{where bag.type:'Paper'}。我将如何在MongoDB中执行此操作。我知道我必须加入Bags,然后链接Item.bagId==Bag.\u id 我使用Studio3T将SQL GROUP BY转换为Mongo聚合。我只是想知道有没有什么实际的方法可以做到这一点 我是否应该执行数据迁移,以便在每个

如何根据记录的子记录过滤一组记录

假设我有一个收集项目,其中有一个字段指向另一个名为bagId的收集包。我想查找Bags上的字段与某个子句匹配的所有项目

即db.Items.find{where bag.type:'Paper'}。我将如何在MongoDB中执行此操作。我知道我必须加入Bags,然后链接Item.bagId==Bag.\u id

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

我是否应该执行数据迁移,以便在每个项目文档中简单地包含Bag.type?我不想养成这样的习惯,每次我想按Bag字段对项目进行排序/筛选时,都会不断地进行架构更改

使用类似“还没有运气”的语法

Grapher我简单地讨论了一下这个问题,虽然它很酷,但我不确定它是否真的能解决我的问题。我可以使用它将Bag.type添加到返回的每个项目中,但我不知道这如何帮助我按Bag.type筛选每个项目

这只是使用NoSQL dbms的一个折衷方案吗?以上建议的选项是什么,或者还有其他想法吗

谢谢

您可以使用MongoDB的。它看起来像这样:

const bagsIds=Bags.find{type:'paper'},{fields:{{u id:1}}}.mapfunctionbag{return bag.\u id;}; const items=items.find{bagId:{$in:bagsIds}}.fetch


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

那么,您是否希望将word paper传递给bags collection,根据从bags中检索到的文档的id获取相应的文档和相应的分类项目文档?这是否回答了您的问题@ChristianFritz我实际上已经在用PublishComposite了。它确实有助于连接我的数据。问题是Item是我的顶级文档,而Bags是子文档,因此我无法按子字段筛选顶级文档。所以我还是有同样的问题,这可能会奏效。需要注意的是,我需要运行两次回迁。先拿包,再拿物品。但可能没问题,因为我正在发布分页记录