Mongodb 使用$lookup运算符连接条件
我有两个模式:bucLaunch-其中存储了与其他业务用例的业务用例关系。和businessUseCase模式,其中是关于businessUseCase的信息(名称、描述、状态等)。一个businessUseCase可以与其他businessUseCase有多个关系,我需要获得一个businessUseCase列表,该列表的状态不是“关闭”状态,并且bucklaunch.businessUseCase等于businessUseCase的特定Id。\u Id 我只到了这一点,我不知道为什么,但仍然返回“关闭”状态 bucLaunch对象如下所示:Mongodb 使用$lookup运算符连接条件,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有两个模式:bucLaunch-其中存储了与其他业务用例的业务用例关系。和businessUseCase模式,其中是关于businessUseCase的信息(名称、描述、状态等)。一个businessUseCase可以与其他businessUseCase有多个关系,我需要获得一个businessUseCase列表,该列表的状态不是“关闭”状态,并且bucklaunch.businessUseCase等于businessUseCase的特定Id。\u Id 我只到了这一点,我不知道为什么,但仍然
{
"_id" : ObjectId("5cab7e9063f03228c0c74acf"),
"businessUseCase" : "111111111111111111111111",
"launchingBusinessUseCase" : "222222222222222222222222"
}
{
"_id" : ObjectId("222222222222222222222222"),
"name" : "Name",
"desc" : "Description",
"state" : "closed"
}
[{
"_id" : ObjectId("333333333333333333333333"),
"name" : "Name2",
"desc" : "Description2",
"state" : "inProgress"
}]
businessUseCase对象如下所示:
{
"_id" : ObjectId("5cab7e9063f03228c0c74acf"),
"businessUseCase" : "111111111111111111111111",
"launchingBusinessUseCase" : "222222222222222222222222"
}
{
"_id" : ObjectId("222222222222222222222222"),
"name" : "Name",
"desc" : "Description",
"state" : "closed"
}
[{
"_id" : ObjectId("333333333333333333333333"),
"name" : "Name2",
"desc" : "Description2",
"state" : "inProgress"
}]
如果会出现另一个业务用例,如:
{
"_id" : ObjectId("333333333333333333333333"),
"name" : "Name2",
"desc" : "Description2",
"state" : "inProgress"
}
和另一个关系对象,如:
{
"_id" : ObjectId("5cab7e9063f03228c0c74acf"),
"businessUseCase" : "111111111111111111111111",
"launchingBusinessUseCase" : "333333333333333333333333"
}
我只希望看到未关闭状态的businessUseCase列表,如下所示:
{
"_id" : ObjectId("5cab7e9063f03228c0c74acf"),
"businessUseCase" : "111111111111111111111111",
"launchingBusinessUseCase" : "222222222222222222222222"
}
{
"_id" : ObjectId("222222222222222222222222"),
"name" : "Name",
"desc" : "Description",
"state" : "closed"
}
[{
"_id" : ObjectId("333333333333333333333333"),
"name" : "Name2",
"desc" : "Description2",
"state" : "inProgress"
}]
那么,如果我想为一个特定的业务用例获取所有相关的业务用例呢?如果我想获取特定businessUseCase(id:111111111111111111)的数据,我希望得到如下结果:
{
"_id" : ObjectId("111111111111111111111111"),
"name" : "Name1",
"desc" : "Description1",
"state" : "closed",
"notClosedRelatedBucList": [
{
"_id" : ObjectId("222222222222222222222222"),
"name" : "Name2",
"desc" : "Description2",
"state" : "inProgress"
},
{
"_id" : ObjectId("444444444444444444444444"),
"name" : "Name2",
"desc" : "Description2",
"state" : "inProgress"
},
...
]
}
问题出现在聚合管道的最后阶段(
$match
):
{
$match: { "output.state": { $ne: ["closed"] } }
}
在这里,您试图将状态
与[“closed”]
(这是一个数组)匹配,这就是为什么它不匹配状态为的文档:“closed”
,并且它也返回这些文档的原因。您应该尝试将其与“closed”(字符串)匹配
在$match阶段尝试以下操作:
{
$match: { "output.state": { $ne: "closed" } }
}
它应该对你有用。希望有帮助
或者,如果要与一个或多个字符串匹配(字符串数组)
,则应使用$nin
而不是$ne
:
{
$match: { "output.state": { $nin: ["closed"] } }
}
有关和的更多信息,请阅读。问题出现在聚合管道的最后阶段(
$match
):
{
$match: { "output.state": { $ne: ["closed"] } }
}
在这里,您试图将状态
与[“closed”]
(这是一个数组)匹配,这就是为什么它不匹配状态为的文档:“closed”
,并且它也返回这些文档的原因。您应该尝试将其与“closed”(字符串)匹配
在$match阶段尝试以下操作:
{
$match: { "output.state": { $ne: "closed" } }
}
它应该对你有用。希望有帮助
或者,如果要与一个或多个字符串匹配(字符串数组)
,则应使用$nin
而不是$ne
:
{
$match: { "output.state": { $nin: ["closed"] } }
}
请阅读更多关于和的信息以了解更多详细信息。它很有效,谢谢!我想我试过了,但可能没有。有没有办法得到我们要求的业务用例,并且在“relatedBucList”之类的键下有相关的未关闭的业务用例?结果应该如下所示:``{//main buc“\u id”:ObjectId(“333”),“name”:“Name2”,“desc”:“Description2”,“state”:“inProgress”,“relatedNotClosedBucList”:[{“name”:“name”,“desc”:“desc”,state”:”在程序中,}]}``我不能正确理解你的问题,你能编辑这个问题并告诉我你想要的结果吗。\Hi,你能帮我吗?我编辑了这个问题。或者我可以亲自联系你吗?你可以通过邮件联系我ravishnkr110@gmail.comIt很好,谢谢!我想我试过了,但可能没有。有没有办法得到我们要求的业务用例,并且在“relatedBucList”之类的键下有相关的未关闭的业务用例?结果应该如下所示:``{//main buc“\u id”:ObjectId(“333”),“name”:“Name2”,“desc”:“Description2”,“state”:“inProgress”,“relatedNotClosedBucList”:[{“name”:“name”,“desc”:“desc”,state”:”在程序中,}]}``我不能正确理解你的问题,你能编辑这个问题并告诉我你想要的结果吗。\Hi,你能帮我吗?我编辑了这个问题。或者我可以亲自联系你吗?你可以通过邮件联系我ravishnkr110@gmail.com