Sql 如何组合where子句和join?

Sql 如何组合where子句和join?,sql,mongodb,mongodb-query,aggregation-framework,Sql,Mongodb,Mongodb Query,Aggregation Framework,如果我用SQL写这篇文章,它会是(某种程度上): 在MongoDB中,我可以做到: # a join between request and response db.response.aggregate([{$lookup: {from: "request", localField: "key", foreignField: "suites.test", as: "matching"} } ]) # find all requests that match a condition db.re

如果我用SQL写这篇文章,它会是(某种程度上):

在MongoDB中,我可以做到:

# a join between request and response 
db.response.aggregate([{$lookup: {from: "request", localField: "key", foreignField: "suites.test", as: "matching"} } ])

# find all requests that match a condition
db.request.find( { "suites.id": ObjectId("58762c40664df86d2069e2c9") } )

# find all responses that match a condition
db.response.find( { "version": "2.0.b1662.5" } )

如何在一个MongoDB查询中组合这三个选项?

有一堆相似的重复项,但我找不到精确匹配的重复项。所以,我根据OP的要求添加了一个答案


根据您的个人查询,您只需要在聚合管道中包含响应(在
$lookup
之前)和请求(在
$unwind
之后,在
$lookup
之后)集合的
$match
阶段。像下面这样

db.response.aggregate([{
    $match: {
        "version": "2.0.b1662.5"
    }
}, {
    $lookup: {
        from: "request",
        localField: "key",
        foreignField: "suites.test",
        as: "matching"
    }
}, {
    $unwind: "$matching"
}, {
    $match: {
        "matching.id": ObjectId("58762c40664df86d2069e2c9")
    }
}])

步骤1:开始编写现代的显式连接语法!我是MongoDB新手,不知道什么是现代显式连接语法。。。在文档中,它没有说它已被弃用。实际上是一个管道,在那里匹配您的文档。对不起,我是说SQL连接!根据您的个人查询,您只需要为
响应
(在
$lookup
之前)和
请求
包括
$diswind
阶段(在
$lookup
之后)在你的聚合管道中收集。正是因为你找不到确切的重复项,我们称之为可能的重复项。最终,你用这些可能的重复项污染了SO,难怪我会发现标记为其他问题的可能重复项的问题,这些问题与我最初寻找的问题无关例如,乒乓球可能会造成重复。明白了,但我觉得可能的重复与OP的问题并不接近,而是纯粹是一个人的观点。现在,任何想寻找简单方式混合连接和何处子句的人都会在这个Q/a中找到它,而不是在如此绝望的情况下蹦蹦跳跳。
db.response.aggregate([{
    $match: {
        "version": "2.0.b1662.5"
    }
}, {
    $lookup: {
        from: "request",
        localField: "key",
        foreignField: "suites.test",
        as: "matching"
    }
}, {
    $unwind: "$matching"
}, {
    $match: {
        "matching.id": ObjectId("58762c40664df86d2069e2c9")
    }
}])