Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add aggregation #7

Merged
merged 1 commit into from
Nov 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Add aggregation
Add doc & create var for pipeline

Add template.js
  • Loading branch information
ljhaywar committed Nov 7, 2019
commit e43b06176646ebf67368e64eeac867ffcec80890
75 changes: 75 additions & 0 deletions aggregation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
const { MongoClient } = require('mongodb');

async function main() {
/**
* Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
* See http://bit.ly/NodeDocs_lauren for more details
*/
const uri = "mongodb+srv://<username>:<password>@<your-cluster-url>/test?retryWrites=true&w=majority";

/**
* The Mongo Client you will use to interact with your database
* See bit.ly/Node_MongoClient for more details
*/
const client = new MongoClient(uri);

try {
// Connect to the MongoDB cluster
await client.connect();

// Make the appropriate DB calls

// Print the 10 cheapest suburbs in the Sydney, Australia market
await printCheapestSuburbs(client, "Australia", "Sydney", 10);

} finally {
// Close the connection to the MongoDB cluster
await client.close();
}
}

main().catch(console.error);

/**
* Print the cheapest suburbs for a given market
* @param {MongoClient} client A MongoClient that is connected to a cluster with the sample_airbnb database
* @param {String} country The country for the given market
* @param {String} market The market you want to search
* @param {number} maxNumberToPrint The maximum number of suburbs to print
*/
async function printCheapestSuburbs(client, country, market, maxNumberToPrint) {
const pipeline = [
{
'$match': {
'bedrooms': 1,
'address.country': country,
'address.market': market,
'address.suburb': {
'$exists': 1,
'$ne': ''
},
'room_type': 'Entire home/apt'
}
}, {
'$group': {
'_id': '$address.suburb',
'averagePrice': {
'$avg': '$price'
}
}
}, {
'$sort': {
'averagePrice': 1
}
}, {
'$limit': maxNumberToPrint
}
];

// See http://bit.ly/Node_aggregate for the aggregate() docs
const aggCursor = client.db("sample_airbnb").collection("listingsAndReviews").aggregate(pipeline);

await aggCursor.forEach(airbnbListing => {
console.log(`${airbnbListing._id}: ${airbnbListing.averagePrice}`);
});
}
30 changes: 30 additions & 0 deletions template.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const { MongoClient } = require('mongodb');

async function main() {
/**
* Connection URI. Update <username>, <password>, and <your-cluster-url> to reflect your cluster.
* See http://bit.ly/NodeDocs_lauren for more details
*/
const uri = "mongodb+srv://<username>:<password>@<your-cluster-url>/test?retryWrites=true&w=majority";

/**
* The Mongo Client you will use to interact with your database
* See bit.ly/Node_MongoClient for more details
*/
const client = new MongoClient(uri);

try {
// Connect to the MongoDB cluster
await client.connect();

// Make the appropriate DB calls

} finally {
// Close the connection to the MongoDB cluster
await client.close();
}
}

main().catch(console.error);

// Add functions that make DB calls here