-
Notifications
You must be signed in to change notification settings - Fork 8
/
createIndexAndProcessData.js
47 lines (44 loc) · 1.3 KB
/
createIndexAndProcessData.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
db = db.getSiblingDB('TravelDb');
// add indexes
db.WikiVoyage.createIndex( { City: 1, Action: 1 } );
db.Countries.createIndex( { "Name": 1 }, { unique: true } );
db.Countries.createIndex( { "Alpha2": 1 }, { unique: true } );
// create a richer collection for cities
db.Cities.aggregate([
{
// join with Countries collection
$lookup: {from: "Countries", localField: "CountryCode", foreignField: "Alpha2", as: "Matched"}
},
{
// fields to fetch
$project: {
Name: "$AsciiName",
AlternateNames: {$split: ["$AlternateNames", ","]},
Latitude: "$Latitude",
Longitude: "$Longitude",
Population: "$Population",
DigitalElevationModel: "$DigitalElevationModel",
Country: {$arrayElemAt: [ "$Matched", 0 ]},
TimeZone: "$Timezone"
}
},
{
// final fields to retrieve (including also the country fields)
$project: {
Name: 1,
AlternateNames: 1,
Latitude: 1,
Longitude: 1,
Population: 1,
DigitalElevationModel: 1,
CountryName: "$Country.Name",
CountryCode: "$Country.Alpha2",
Region: "$Country.Region",
Subregion: "$Country.Subregion",
TimeZone: 1
}
},
{
$out : "CitiesExtended"
}
]);