MongoDB:在一个查询中从不同的集合中获取文档
Posted
技术标签:
【中文标题】MongoDB:在一个查询中从不同的集合中获取文档【英文标题】:MongoDB: Fetching documents from different collections in one query 【发布时间】:2021-09-23 10:58:52 【问题描述】:我为两种不同类型的产品提供了两个不同的系列。现在,我想从两个集合中为特定用户获取所有文档。
我知道我可以对每个集合进行 2 个查询,在服务器端合并它们并将结果发送给用户。这样做的缺点是我必须从两个集合中为用户获取所有文档,这不利于分页。这就是为什么我想在一个查询中完成,所以我也可以将分页逻辑留给 MongoDB。
这是集合和预期结果的示例:
Products_type_1
[
"name": "product_1",
"user": "user_1",
...
,
"name": "product_2",
"user": "user_2",
...
]
Products_type_2
[
"name": "product_3",
"user": "user_1",
...
,
"name": "product_4",
"user": "user_2",
...
]
预期结果:
[
"type": "Products_type_1",
"name": "product_1",
"user": "user_1",
...
,
"type": "Products_type_2",
"name": "product_3",
"user": "user_1",
...
]
【问题讨论】:
【参考方案1】:您可以将聚合框架与$unionWith 阶段一起使用:
db.Products_type_1.aggregate([
"$match":
"user": "user_1"
,
$unionWith:
coll: "Products_type_2",
pipeline: [
"$match":
"user": "user_1"
]
])
游乐场:https://mongoplayground.net/p/v0dKCwiKsZU
如果要使用分页,则需要添加排序阶段以确保结果中文档的顺序一致。
【讨论】:
【参考方案2】:首先,我会查询为不同的“product_type_x”设置不同集合的逻辑。如果您有一个带有添加字段的集合...
"productType" : 1,
...
,
这样就解决了这个问题,现在可以在一个集合中访问与 Procts 相关的所有内容。数据聚合现在变得简单(通过比较)
【讨论】:
以上是关于MongoDB:在一个查询中从不同的集合中获取文档的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB:如何在 100 个集合中找到 10 个随机文档?