Mongodb 一次往返执行多个查询

Posted

技术标签:

【中文标题】Mongodb 一次往返执行多个查询【英文标题】:Mongodb execute multiple queries in one round trip 【发布时间】:2019-03-25 13:32:29 【问题描述】:

有没有类似 elasticsearch Multi Search API 的东西? 链接是:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html

考虑我有多个查询,我想将这些查询提供给 mongo 并按顺序获取结果。

【问题讨论】:

【参考方案1】:

是的,MongoDB 中也有类似的东西。使用聚合框架,您可以在 $facet 阶段内定义多个聚合管道。

试试:

db.col.save(a:1)
db.col.save(a:2)


db.col.aggregate([
    
        $facet: 
            query1: [  $match:  a:1  ,  $project:  _id: 0   ],
            query2: [  $match:  a:2  ,  $project:  _id: 0   ],
        
    
])

哪个打印:

 "query1" : [  "a" : 1  ], "query2" : [  "a" : 2  ] 

使用$facet,您必须记住单个 BSON 文档的大小不能超过 16 MB。更多关于聚合限制here

【讨论】:

请注意,如果您需要为此查询提供提示,这只能在 MongoDB 版本 3.6 或更高版本中实现 为了澄清,您可能需要提供一个提示,否则 mongo 可能不会使用索引,原因是:jira.mongodb.org/browse/SERVER-30474 感谢@Joe 的评论

以上是关于Mongodb 一次往返执行多个查询的主要内容,如果未能解决你的问题,请参考以下文章

一次往返执行多个 SQL 命令

Mongodb3.4.7搭建高可用集群

在 MongoDB Spring Data 中使用多个方面

一次 mongoDB 异常崩溃

MongoDB查询以获取与具有多个值的键匹配的所有文档[重复]

具有多个指定相同运算符的表达式的 mongodb 查询