2

我希望能够在 MongoDB Compass 中获取字段或嵌套字段的所有不同值。

4

1 回答 1

2

这是我一直在 Compass 中使用的一种方式。

如果您进入 Compass 到您想要的集合并转到聚合选项卡,您可以这样展开和分组:

选择 $unwind 然后填写您想要的字段,前缀为$。如果字段是数组,我通常会忽略空数组和空数组。

{
  path: '$displayFirstName',
  preserveNullAndEmptyArrays: false
}

然后使用 $group 阶段对值进行分组并将它们添加到集合中:

{
  _id: null,
  uniqueFirstNames: {
    $addToSet: '$displayFirstName'
  }
}

唯一的值列表将显示在 $group 阶段的右侧。

如果该值是嵌套的并且您想要展平结果,只需在最后的 $group 阶段之前为每个级别添加更多的 $unwind 阶段。例如,如果您有user.addresseswhich 是一个对象数组,并且您希望将所有用户的所有可能地址类型作为一个扁平列表获取,您可以这样做。

$放松

{
  path: '$addresses',
  preserveNullAndEmptyArrays: false
}

第二次放松

{
  path: '$addresses.type',
  preserveNullAndEmptyArrays: false
}

$组

{
  _id: null,
  uniqueAddressTypes: {
    $addToSet: '$addresses.type'
  }
}
于 2020-12-17T17:36:30.403 回答