mongodb - Mongo DB - 如何根据供应商获取组产品?
问题描述
我需要你的帮助。鉴于下面的结构,我需要以某种方式查询文档以获取给定供应商的所有“产品”。
{
"supplier" : [
{"name" : "supplier 1",
"products" : [
{ "name" : "product 1" }
{ "name" : "product 2" }
]
},
{
"name" : "supplier 1",
"products" : [
{ "name" : "product 3" }
]
},
{
"name" : "supplier 2",
"products" : [
{ "name" : "product 3" }
]
},
]
}
“供应商 1”的结果文档应如下(或类似)。
{
"products" : [
{ "name" : "product 1" },
{ "name" : "product 2" },
{ "name" : "product 3" }
]
}
结果应仅包含 的唯一值products
。什么是好的服务器端解决方案?先感谢您。
解决方案
$unwind
解构supplier
数组$group
通过supplier.name
并制作数组products
$project
显示必填字段,$reduce
使用循环products
和连接数组或产品$concatArrays
db.collection.aggregate([
{ $unwind: "$supplier" },
{
$group: {
_id: "$supplier.name",
products: { $push: "$supplier.products" }
}
},
{
$project: {
_id: 0,
name: "$_id",
products: {
$reduce: {
input: "$products",
initialValue: [],
in: { $concatArrays: ["$$this", "$$value"] }
}
}
}
}
])
推荐阅读
- java - HttpConnectionManagerParams 不适用于 HTTPS URL
- .net - 我可以在 .NET Framework 中创建 UWP 项目吗?
- javascript - 如何更改 Javascript map() 函数中元素的值?
- android-emulator - mac下如何root Android Studio Emulator(3.2.1版本)
- laravel - SQLSTATE[HY000]:一般错误:1215 无法添加外键约束 Laravel 5.8
- java - 为什么在 for 循环的第二次迭代中找不到 XPATH
- vb.net - System.IO.EndOfStreamException:试图在 iTextSharp 中读取流的末尾
- reactjs - 如何在不导致组件安装两次的情况下将道具传递给路由?
- python - 无法在 Visual Studio 2013 中设置 Python2
- angular - 在 Ionic 4 中调用 complete() 时,无限滚动不起作用