I have data like this, I need all the keys from this mongodb collection like property1,property2 etc.
{
"_id": 0,
"config": [{
"property1":"a",
"property2": "b",
"property3": "c",
"property4": "d"
},
{
"property1": "a",
"property2": "bb",
"property3": "cc",
"property4": "d",
"ispropert5": true
},
{
"property1": "a",
"property2": "b",
"property3": "c",
"property4": "ddd",
"ispropert5": false,
"ispropert6": false
}
],
"entity": "123asdf",
"url": "",
"createdDate": 1
}
I tried
db.COLLECTION_NAME.find({},{config:1}).forEach(function(doc){Object.keys(doc).forEach(function(key){innerkeys[key]=1})}):
Advertisement
Answer
You can use $objectToArray to read object keys dynamically and then run $reduce with $concatArrays to merge the results:
db.collection.aggregate([
{
$project: {
properties: {
$reduce: {
input: "$config",
initialValue: [],
in: {
$concatArrays: [
"$$value",
{
$map: {
input: {
$objectToArray: "$$this"
},
in: "$$this.k"
}
}
]
}
}
}
}
}
])
Output:
[
{
"_id": 0,
"properties": [
"property3",
"property4",
"property1",
"property2",
"property4",
"ispropert5",
"property1",
"property2",
"property3",
"property2",
"property3",
"property4",
"ispropert5",
"ispropert6",
"property1"
]
}
]