下面是mongodb收集的示例数据。我正在尝试触发一个查询,该查询将返回集合中的属性和数组。
示例文档:
{
"_id" : ObjectId("5e940d6c2f804ab99b24a633"),
"accountId" : ObjectId("7e1c1180d59de1704ce43557"),
"description":"some desc",
"configs": {},
"dependencies" : [
{
"commute" : {},
"distance" : {},
"support":{}
}
]
}预期输出:
{
[0]:commute
[1]:distance
[2]:support
}我尝试获取响应并迭代依赖项对象,还尝试使用es6将其转换为数组对象。但这是一个昂贵的操作,因为这个列表将是非常大的。如果有,则在Mongo中存在将响应转换为数组的方法。
发布于 2020-04-13 16:06:28
您可以尝试下面的聚合查询:
db.collection.aggregate([
{
$project: {
_id: 0,
dependenciesKeys: {
$reduce: {
input: "$dependencies", // Iterate over 'dependencies' array
initialValue: [],
in: {
$concatArrays: [ /** concat each array returned by map with holding 'value */'
"$$value",
{
$map: {
input: {
$objectToArray: "$$this" /** Convert each object in 'dependencies' to array [{k:...,v:...},{k:...,v:...}] & iterate on each object */
},
in: "$$this.k" // Just return keys from each object
}
}
]
}
}
}
}
}
])测试: MongoDB-游乐场
参考文献: $reduce,$map,$concatArrays,$objectToArray & $project
https://stackoverflow.com/questions/61186995
复制相似问题