考虑一个关于设备信息的MongoDB集合。结构和 集合的内容由下表总结。 型牌彩色存储 “电话”“A”[“白色”,“黑色”][64,128,256] “垫”“A”(“白色”、“黑色”,“紫色”)(128、256、512) “平板电脑”“A”[“蓝色”][16,64,128] "B" ["white", "orange", "gold", “灰色”) [128, 256] 1024] "Phone" "B" ["white", "black", "gold", “灰色”) [128,256,512] 编写MongoDB查询,完成以下任务: a.列出每种设备类型的所有颜色和可用存储空间。(5分) b.列出除黑色外所有可用于手机的颜色。(5分) c.列出每个品牌生产的除白色以外的所有颜色。
时间: 2023-12-06 11:44:47 浏览: 71
a. 列出每种设备类型的所有颜色和可用存储空间。
```
db.devices.aggregate([
{$unwind: "$specs"},
{$project: {_id: 0, device_type: 1, color: "$specs.color", storage: "$specs.storage"}},
{$group: {_id: {device_type: "$device_type", color: "$color"}, storage: {$addToSet: "$storage"}}},
{$group: {_id: "$_id.device_type", specs: {$push: {color: "$_id.color", storage: "$storage"}}}}
])
```
b. 列出除黑色外所有可用于手机的颜色。
```
db.devices.aggregate([
{$match: {device_type: "Phone"}},
{$unwind: "$specs"},
{$match: {"specs.color": {$ne: "黑色"}}},
{$group: {_id: "$specs.color"}}
])
```
c. 列出每个品牌生产的除白色以外的所有颜色。
```
db.devices.aggregate([
{$unwind: "$specs"},
{$match: {"specs.color": {$ne: "白色"}}},
{$group: {_id: {brand: "$brand", color: "$specs.color"}}},
{$group: {_id: "$_id.brand", colors: {$addToSet: "$_id.color"}}}
])
```
阅读全文