0

我正在使用 MongoDB。我在一个集合的文档中有多个字段,它们是颜色、样式、关键字、形状等,所有数据类型都是数组。我想要所有文档中颜色、样式、形状、关键字等的所有唯一值。

示例文件如下 pr

  "_id": "5de63ae0d88ea145cc7accb5",
  "id": "28011",
  "name": "BID 2",
  "slug": "bid-2",
  "description": "<p>Decorative details of graphic foliage interpreted in the latest colours such as black, pink, green and turquoise. The soft texture of the ceramic envelops with warmth even the coldest dish.</p>\r\n\r\n<ul>\r\n\t<li>Dishwasher and microwave safe</li>",
  "price": "0.00",
  "keywords": [
    "Kitchen",
    "cook",
    "cooking",
    "kitchens",
    "pantry",
    "kitchen room",
    "room",
    "cookhouse",
    "cookery",
    "cuisine",
    "cook room",
    "food",
    "Crockery",
    "dishware",
    "dishes",
    "plates",
    "platters",
    "stoneware",
    "bone china",
    "porcelain",
    "earthenware",
    "ironstone",
    "plate",
    "dish",
    "small dish",
    "fruit dish",
    "fruit plate",
    "",
    "dessert plate"
  ],
  "Country": [
    "Italy"
  ],
  "Shape": [
    "Round"
  ],
  "Brand": [
    "Bitossi Home"
  ],
  "Materials": [
    "Ironstone"
  ],
  "Usage": [
    "Fruit Plate"
  ],
  "Color": [
    "Pink"
  ]
  }
}

我尝试使用 $groupby。但它给了我不同数组中的独特数组。我想要如下结果

{'color' : ['blue', 'red', 'green', 'white', 'gold'],
'shape' : ['round', 'square'],
'style' : [],
'keywords' : ['room', 'kitchen']}
4

2 回答 2

0

这里是MongoPlay Around

db.collection.aggregate([ {
                            $unwind: "$Color"
                          },
                          {
                            $unwind: "$Shape"
                          },
                          {
                            $group: {
                            _id: null,
                                color: {
                                    $addToSet: "$Color"
                                },
                                Shape: {
                                    $addToSet: "$Shape"
                                }
                           }
                         },
                         {
                           $project: {
                               _id: 0
                         }

                      ])

或者您可以使用它 您可以使用 Distinct 仅从定义的字段中获取唯一值。

// syntax is..
             db.collection.distinct(fields,query)

// your query is..

db.collection.distinct(color,style,shape)
于 2019-12-03T07:13:16.190 回答
0

可以使用addToSetreduce来完成

该组将所有值合并到一个文档中。

reduce 将数组数组转换为数组

db.dimen.aggregate( 
   [ 
      { 
         "$group":{ 
            "_id":0,
            Color:{ 
               $addToSet:'$Color'
            },
            Shape:{ 
               $addToSet:'$Shape'
            }
         }
      },
      { 
         $project:{ 
            "Color":{ 
               $reduce:{ 
                  input:"$Color",
                  initialValue:[ 

                  ],
                  in:{ 
                     $concatArrays:[ 
                        "$$value",
                        "$$this"
                     ]
                  }
               }
            },
            "Shape":{ 
               $reduce:{ 
                  input:"$Shape",
                  initialValue:[ 

                  ],
                  in:{ 
                     $concatArrays:[ 
                        "$$value",
                        "$$this"
                     ]
                  }
               }
            }
         }
      }
   ]
);
于 2019-12-03T12:54:29.760 回答