首页 > 解决方案 > 需要从 mongodb 中的对象获取所有密钥

问题描述

我有以下格式的数据

[
  { _id: ObjectId, spec: { abc: 'abc', bcd: 'bcd', cde: 'cde' } },
  { _id: ObjectId, spec: { bcd: 'bcd', cde: 'cde', efg: 'efg' } },
  { _id: ObjectId, spec: { cde: 'cde', efg: 'efg', ghi: 'ghi' } },
  { _id: ObjectId, spec: { ghi: 'ghi', abc: 'abc', bcd: 'bcd' } }
];

我需要spec使用这样的聚合从所有对象中获取对象中的所有键。

['abc','bcd','cde','efg','ghi']

标签: mongodbmongooseaggregation-frameworknosql-aggregation

解决方案


  • $objectToArrayspec以键值格式将对象转换为数组
  • $unwind解构spec数组
  • $groupspec通过 null 并使用构造对象键的唯一数组$addToSet
db.collection.aggregate([
  { $project: { spec: { $objectToArray: "$spec" } } },
  { $unwind: "$spec" },
  {
    $group: {
      _id: null,
      spec: { $addToSet: "$spec.k" }
    }
  }
])

操场


推荐阅读