需要从 mongodb 中的对象获取所有密钥

need get all key from object in 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']
  • $objectToArrayspec 对象转换为键值格式的数组
  • $unwind解构spec数组
  • $group 为 null 并使用 $addToSet
  • 构造 spec 对象键的唯一数组
db.collection.aggregate([
  { $project: { spec: { $objectToArray: "$spec" } } },
  { $unwind: "$spec" },
  {
    $group: {
      _id: null,
      spec: { $addToSet: "$spec.k" }
    }
  }
])

Playground