MongoDB查询:仅在满足特定条件的情况下才获得文档的加入
我希望 mongodb 查询给出下面的这些详细信息,并获得最佳性能。
让我从一个例子开始:
让我有一个集合,
/// the collection
services =
[
{
_id: obj(id1),
provider_id: "provider1",
service_code: "code1",
price: 20
},
{
_id: obj(id2),
provider_id: "provider1",
service_code: "code2",
price: 20
},
{
_id: obj(id3),
provider_id: "provider1",
service_code: "code3",
price: 20
},
{
_id: obj(id4),
provider_id: "provider2",
service_code: "code1",
price: 10
},
{
_id: obj(id5),
provider_id: "provider2",
service_code: "code2",
price: 20
},
{
_id: obj(id6),
provider_id: "provider3",
service_code: "code1",
price: 20
}
]
我想要获取(仅)支持这两个服务代码的所有服务提供商:code1、code2。
以及总价按总价排序。
输出是这样的:
/// required output based the posted collection and required requirements.
output =
[
{
provider_id: "provider1",
total_price: 40,
},
{
provider_id: "provider2",
total_price: 30,
}
]
我不想要这个输出:
[
{
"_id": "provider1",
"total_price": 40
},
{
"_id": "provider2",
"total_price": 30
},
{
"_id": "provider3",
"total_price": 20
}
]
如何完成这个?谢谢
I want to have the mongodb query given these details below, and to have best in performance.
Let me start by an example:
Let me have a collection,
/// the collection
services =
[
{
_id: obj(id1),
provider_id: "provider1",
service_code: "code1",
price: 20
},
{
_id: obj(id2),
provider_id: "provider1",
service_code: "code2",
price: 20
},
{
_id: obj(id3),
provider_id: "provider1",
service_code: "code3",
price: 20
},
{
_id: obj(id4),
provider_id: "provider2",
service_code: "code1",
price: 10
},
{
_id: obj(id5),
provider_id: "provider2",
service_code: "code2",
price: 20
},
{
_id: obj(id6),
provider_id: "provider3",
service_code: "code1",
price: 20
}
]
I want to get all service providers that (only) support these both service codes : code1, code2.
And the total price sorted by total price.
The output is like this:
/// required output based the posted collection and required requirements.
output =
[
{
provider_id: "provider1",
total_price: 40,
},
{
provider_id: "provider2",
total_price: 30,
}
]
I don't want this output:
[
{
"_id": "provider1",
"total_price": 40
},
{
"_id": "provider2",
"total_price": 30
},
{
"_id": "provider3",
"total_price": 20
}
]
How to accomplish this? Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这可能是
$group
最基本的用例。这是 Mongo Playground 供您参考。
This is probably the most basic use case of
$group
.Here is the Mongo playground for your reference.
我能够使用$项目获得您需要的输出:
我修改了射线,回答一点,刚刚添加了汇总项目:)我的游乐场在这里
I was able to get the output you needed using $project:
I modified rays answer a little bit and just added the project aggregate :) My playground is here Mongo Playground
Mongo Playground
这与您想要的输出不同,但它只返回与provider_Id匹配的数据。
$unwind 文档 $match 文档
Mongo Playground
This is not like your desired output but it only returns the data which matches with provider_Id.
$unwind documentation $match documentation