MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

莫里斯·辛格

我有一个单页应用程序,该应用程序以我在Node.js上运行的JavasScript中编写的API为食,并使用MongoDB进行数据存储。该API公开了几种不同的内容类型,每种类型都存储在我的MongoDB数据库中的单独集合中。我的单页应用程序具有一个搜索栏,其中包括一个用于选择内容类型的下拉列表(每个对应于我的MongoDB数据库中的一个不同集合)和一个输入字段,用于指定将要应用的搜索查询。

我想做的是:在下拉菜单中添加一个名为“全部”的选项,并且选中该选项后,我的API将返回最近创建的五个文档,而与包含这些文档的集合无关。

因此,作为示例,我可能具有以下集合:

  • 汽车类
  • 飞机
  • 单车

我想在我的API中编写JavaScript,该JavaScript返回其中任何一个的最新值。这样,如果用户搜索“ G”,则我生成的JSON响应可能包含每个集合中的多个文档,如下所示:

 [
   {
     "_id": "123",
     "name": "Golf,
     "collection: "Automobile",
     "createdAt": "2014-06-20T01:45:00.0000Z"
   },
   {
     "_id": "234",
     "name": Gulfstream",
     "collection": "Airplane",
     "createdAt": "2014-06-19T01:45:00.0000Z"
   },
   {
     "_id": "345",
     "name": "Glastron",
     "collection": "Boat",
     "createdAt": "2014-06-18T01:45:00.0000Z"
   },
   {
     "_id": "456",
     "name": "Gary Fisher",
     "collection" "Bicycle",
     "createdAt": "2014-06-17T01:45:00.0000Z"
   }
   {
     "_id": "567",
     "name": "Grand Prix",
     "collection": "Automobile",
     "createdAt": "2014-06-16T01:45:00.0000Z"
   }
 ]

问题:是否可以在Mongo中搜索多个馆藏,如果可以,该如何做?

请注意:

  1. 与尝试在Mongo中进行JOIN相比,这是一个非常不同的问题-至少可能是这样。(请参阅:MongoDB-搜索多个集合。我没有像在JOIN中那样尝试关联来自不同集合的文档。(例如,不能说Boats集合中的文档包含有关Automobiles集合中文档的详细信息。 )
  2. 似乎存在一个糟糕的解决方案,其中涉及对每个集合运行查询(即查询五辆汽车,五架飞机,五艘船和五辆自行车;将结果合并到一个数组中,按createdAt排序,然后拼接阵列前面的前五个)。请参阅:Meteor.js-在多个集合上进行用户搜索的方法但是,如果可能的话,我想避免这种情况,因为(i)这会使查询效率降低5倍;(ii)分页非常困难。
  3. 我使用Sails.js作为我的框架(因此,将Waterline作为我的ORM)。因此,即使在Mongo层不可能做到这一点,我也认为它可能已在ORM层实现。是这样,如果是这样,我将如何使用它?
莫里斯·辛格

尽管John Petrone的评论非常有帮助(因为它指出我在Mongo中遇到了限制),但我确实想整理一整套可能的解决方案列表:

  1. 运行每个集合的查询(即,查询五辆汽车,五架飞机,五艘船和五辆自行车;将结果合并到一个数组中,按createdAt排序,然后将前五个拼接在数组的前面)。(请在上面的问题中查看此解决方案的更多详细信息)。
  2. 根据上面的John Petrone的评论,将所有这些类型的对象存储在同一集合中。
  3. 通过仅存储生成搜索结果所需的每个文档中数据的副本来对数据进行非规范化;所有这些副本,无论存储其源文档的集合如何,都可以保存在一个集合中(例如,SearchResults),并且在我的SPA中进行搜索可以请求查询该集合中的文档的API端点。这是对John Petrone提出的解决方案的改编(在上面的评论中),其中考虑到我使用过的JavaScript / Mongo ORM(例如Waterline和Mongoose)的实际限制,如果这样做,所有这些都会使生活真的很惨您想将使用不同模型构造的文档存储在同一集合中。缺点:需要额外的查询创建,更新和删除;更多数据要存储;必须使SearchResult数据与源文档保持同步。好处:高效的读取查询;轻松与JavaScript / Mongo ORM兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

来自分类Dev

如何在mongodb中将一个文档保存到同一数据库的两个不同集合中

来自分类Dev

从同一数据库中的不同mongodb封顶集合同时读取和写入

来自分类Dev

同一数据库中相关集合的MongoDB分片

来自分类Dev

当多个JVM访问同一数据库时,如何在Java中获得行级锁?

来自分类Dev

如何使用同一数据库表的查询结果更新MYSQL表中的字段?

来自分类Dev

Laravel 数据库返回的日期时间与同一数据库中的记录不同

来自分类Dev

可以在同一数据库中混合存储引擎吗?

来自分类Dev

在同一数据库上使用多个FluentMigrator程序集

来自分类Dev

如何在具有多个服务器的同一数据库上使用骆驼JPA组件?

来自分类Dev

如何使用Python Pandas使用同一数据库创建多个数据框

来自分类Dev

如何合并同一数据框的多行?或者如何在python中合并同一个键对的多个值?

来自分类Dev

如何创建到同一数据库但具有不同凭据的多个sqlalchemy连接?

来自分类Dev

我应该在mongodb的同一数据库中使用不同的数据库还是在不同的集合中使用不同的集合?

来自分类Dev

MongoDB:如何“合并所有”来自同一集合的结果?

来自分类Dev

同一数据库中的表复制

来自分类Dev

如何在Play Framework 2.2的单独线程中使用同一数据库事务

来自分类Dev

如何在Play Framework 2.2的单独线程中使用同一数据库事务

来自分类Dev

如何在同一数据框内合并熊猫列?

来自分类Dev

如何在共享相同未知密钥的同一数组中合并多个对象?

来自分类Dev

如何在python中的同一数据框中合并行?

来自分类Dev

如何在MySQL中的多个数据库中更改同一表

来自分类Dev

如何显示同一数据库中2个表的所有记录?

来自分类Dev

在同一数据库上混合存储引擎可以吗?

来自分类Dev

如何在同一SQL数据库中存储多个应用程序的用户?

来自分类Dev

如何在同一行中从数据库订购多个项目?

来自分类Dev

如何在数据库中插入唯一数据/处理重复数据

来自分类Dev

如何在使用同一数据的多个变量中限制变量的数据更改?

来自分类Dev

如何在使用同一数据的多个变量中限制变量的数据更改?

Related 相关文章

  1. 1

    MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

  2. 2

    如何在mongodb中将一个文档保存到同一数据库的两个不同集合中

  3. 3

    从同一数据库中的不同mongodb封顶集合同时读取和写入

  4. 4

    同一数据库中相关集合的MongoDB分片

  5. 5

    当多个JVM访问同一数据库时,如何在Java中获得行级锁?

  6. 6

    如何使用同一数据库表的查询结果更新MYSQL表中的字段?

  7. 7

    Laravel 数据库返回的日期时间与同一数据库中的记录不同

  8. 8

    可以在同一数据库中混合存储引擎吗?

  9. 9

    在同一数据库上使用多个FluentMigrator程序集

  10. 10

    如何在具有多个服务器的同一数据库上使用骆驼JPA组件?

  11. 11

    如何使用Python Pandas使用同一数据库创建多个数据框

  12. 12

    如何合并同一数据框的多行?或者如何在python中合并同一个键对的多个值?

  13. 13

    如何创建到同一数据库但具有不同凭据的多个sqlalchemy连接?

  14. 14

    我应该在mongodb的同一数据库中使用不同的数据库还是在不同的集合中使用不同的集合?

  15. 15

    MongoDB:如何“合并所有”来自同一集合的结果?

  16. 16

    同一数据库中的表复制

  17. 17

    如何在Play Framework 2.2的单独线程中使用同一数据库事务

  18. 18

    如何在Play Framework 2.2的单独线程中使用同一数据库事务

  19. 19

    如何在同一数据框内合并熊猫列?

  20. 20

    如何在共享相同未知密钥的同一数组中合并多个对象?

  21. 21

    如何在python中的同一数据框中合并行?

  22. 22

    如何在MySQL中的多个数据库中更改同一表

  23. 23

    如何显示同一数据库中2个表的所有记录?

  24. 24

    在同一数据库上混合存储引擎可以吗?

  25. 25

    如何在同一SQL数据库中存储多个应用程序的用户?

  26. 26

    如何在同一行中从数据库订购多个项目?

  27. 27

    如何在数据库中插入唯一数据/处理重复数据

  28. 28

    如何在使用同一数据的多个变量中限制变量的数据更改?

  29. 29

    如何在使用同一数据的多个变量中限制变量的数据更改?

热门标签

归档