I have data like this, I need all the keys from this mongodb collection like property1,property2
etc.
JavaScript
x
29
29
1
{
2
"_id": 0,
3
"config": [{
4
"property1":"a",
5
"property2": "b",
6
"property3": "c",
7
"property4": "d"
8
},
9
{
10
"property1": "a",
11
"property2": "bb",
12
"property3": "cc",
13
"property4": "d",
14
"ispropert5": true
15
},
16
{
17
"property1": "a",
18
"property2": "b",
19
"property3": "c",
20
"property4": "ddd",
21
"ispropert5": false,
22
"ispropert6": false
23
}
24
],
25
"entity": "123asdf",
26
"url": "",
27
"createdDate": 1
28
}
29
I tried
JavaScript
1
2
1
db.COLLECTION_NAME.find({},{config:1}).forEach(function(doc){Object.keys(doc).forEach(function(key){innerkeys[key]=1})}):
2
Advertisement
Answer
You can use $objectToArray to read object keys dynamically and then run $reduce with $concatArrays to merge the results:
JavaScript
1
26
26
1
db.collection.aggregate([
2
{
3
$project: {
4
properties: {
5
$reduce: {
6
input: "$config",
7
initialValue: [],
8
in: {
9
$concatArrays: [
10
"$$value",
11
{
12
$map: {
13
input: {
14
$objectToArray: "$$this"
15
},
16
in: "$$this.k"
17
}
18
}
19
]
20
}
21
}
22
}
23
}
24
}
25
])
26
Output:
JavaScript
1
23
23
1
[
2
{
3
"_id": 0,
4
"properties": [
5
"property3",
6
"property4",
7
"property1",
8
"property2",
9
"property4",
10
"ispropert5",
11
"property1",
12
"property2",
13
"property3",
14
"property2",
15
"property3",
16
"property4",
17
"ispropert5",
18
"ispropert6",
19
"property1"
20
]
21
}
22
]
23