迭代一个对象并获取所有键,并将它们设置到聚合框架中的一个新字段中



我有一个对象,其中有一个值为对象的键。我想在包含所有密钥名称的文档中添加一个新字段。

示例对象:

{
heros: {
superman: 51,
batman: 89,
ironman: 95,
}
}

执行$addField:后的预期输出

{
heros: {
superman: 51,
batman: 89,
ironman: 95,
}
allHeros: ['superman', 'batman', 'ironman'],
}
  • $objectToArrayheros对象转换为数组键值格式
  • $map迭代上述转换数组的循环并返回关键字
db.collection.aggregate([
{
$addFields: {
allHeros: {
$map: {
input: { $objectToArray: "$heros" },
in: "$$this.k"
}
}
}
}
])

游乐场


还有第二个选项,

  • $objectToArrayheros对象转换为数组键值格式
  • 只需使用allHeros.k,它就会返回密钥数组
db.collection.aggregate([
{
$addFields: {
allHeros: { $objectToArray: "$heros" }
}
},
{
$addFields: {
allHeros: "$allHeros.k"
}
}
])

游乐场

最新更新