GIANT Stories at MongoDB

2019 William Zola Award Nominations

Community is core to the success of MongoDB and the people that use it. This year is the fifth year we've held the William Zola Award for Community to honor those whose contributions to support have made a significant difference to people around the world. The William Zola Award for Community Excellence was created in 2014 to honor those whose support contributions make a significant difference to people around the globe.

One of our strongest Community Support advocates was William Zola, who passed away unexpectedly in that year. William, Lead Technical Services Engineer at MongoDB, had a passion for creating user success and helped thousands of users with support problems, much of it on his own time. William was so effective at meeting users in their time of distress that people often asked for him by name on the MongoDB User Forum. Most engineers at MongoDB went through his customer skills training to learn how to create an ideal user experience while maintaining technical integrity. William taught us the following.

  • How the user feels is every bit as important as solving their technical problem.
  • We should work to solve the problem and not just close a case or ticket.
  • Every user interaction should drive the case one step closer to resolution.
  • It’s all about the user.

Over time, William’s advice and philosophy towards user success came to permeate MongoDB’s entire organization and community.

The Award

This year at MongoDB World we will announce the 2019 winner of “The Zola.” We will award an individual who has offered exceptional support to our community in line with William’s philosophy. The winner of the Zola will receive a complimentary hotel stay while at MongoDB World along with a $1,000 Amazon Gift Card.

Today we open nominations and begin the search for this year's winner of the Zola. MongoDB users who support others on StackOverflow, MongoDB Google Groups, at a MongoDB User Group, or in person through ad-hoc or structured mentoring are all qualified to receive the award.

Nominations will be accepted until April 30th, 2019 through this form, so please send in names of people who have positively impacted your experience with MongoDB. Individuals will be judged on the impact of their work and their demonstration of William’s values.

William’s extraordinary contributions are remembered in users like you who pass along your knowledge of MongoDB and do it with gusto. Even if you do not qualify for the Zola now, there is always an opportunity for you to contribute to the MongoDB ecosystem by sharing your ideas and experience on StackOverflow, the MongoDB User Forum and in your local communities.

Tell us who you think should receive this year's “Zola”.

Submit your nominations today

Prizes

  • $1,000 Amazon Gift Certificate
  • Ticket to MongoDB World 2019
  • Hotel stay during MongoDB World

How Winners Will Be Selected

MongoDB will pick the winning applicant by May 8th and will notify the winner via email. The winners will be chosen based on a combination of user votes and contributions made to the community.

For more information see the Zola Award Terms and Service.

Stitching Sheets: Using MongoDB Stitch To Create An API For Data In Google Sheets

Thanks to MongoDB Stitch, it is easier than ever to integrate web services with MongoDB. In this example, we are going to use it to make calendar data flow between Google Sheets and MongoDB, complete with Google Sheets menus and an optional slack bot to access the data in MongoDB.

Build a Slack App in 10 minutes with MongoDB Stitch

Slack is not only the fastest growing startup in history, but it's also an app by the same name and one of the most popular communication tools in use today. We use it extensively at MongoDB to foster efficient communications between teams and across the company. We're not alone. It seems like every developer I encounter uses it in their company as well.

One interesting thing about Slack (and there are many) is its extensibility. There are several ways you can extend Slack. Building chatbots, applications that interface with the communication service and extending Slack through the introduction of additional commands called "slash commands" that enable Slack users to communicate with external services. In this article, we'll build a simple slash command that enables users to store and retrieve data in and from a MongoDB database. I'm always finding interesting information on the internet that I want to share with my team members so let's build an application we'll call URL Stash that will store interesting URLs for later retrieval via a Slack slash command.

Announcing the 2018 Hacktoberfest Winner

On behalf of my team and everyone at MongoDB, I'm excited to announce the winner of the MongoDB Hacktoberfest - Best use of Stitch contest - Stephanie Orpilla with their application, MorningPages. It's an application designed to improve users creativity by ensuring that they write every day.

MongoDB Hackathon Guide

This guide was created to help you through the process of leveraging MongoDB as part of your hackathon project.

Connecting MongoDB Stitch to Google Places

One of the services that make available a wealth of data via API, is Google Places.

Imagine we want to provide users of our application with information about a business with whom we partner. Insurance companies do this with providers of accommodations, transportation, and healthcare. We don’t want to maintain this information, or own it - rather, we’d prefer to leverage a service that provides this information about these service providers. Google Places is just such a service provider.

For this application, we’ll use the following Stitch components to integrate MongoDB with Google Places.

Stitch Functions

Stitch functions are written in JavaScript ES6 and can be called from our SDKs, Triggers, or Webhooks and are great for coordinating data access or doing light processing alongside a query or insert. Communicating with data provider services such as Google Places is as simple as leveraging an HTTP service within a serverless stitch function:

    
const http = context.services.get("GooglePlaces");
 return http
   .get({url: GooglePlacesSearchURL})
   .then(resp=>{
       //The response body is encoded as raw BSON.Binary. Parse it to JSON.
       var search_result = EJSON.parse(resp.body.text());
    

Stitch’s Functions also let you reference context – such as services, variables, or user information – in order to make it easier to leverage services and information across your entire application. Stitch also provides several third-party services including AWS, Twilio, and Github.

Stitch Services

The HTTP service that we create here will also have an incoming webhook, meaning that it can make outgoing HTTP requests within Stitch Functions, but also handle incoming HTTP services.

Stitch Trigger

Stitch Triggers enable reactivity to inserts, updates, deletes, and replaces that occur in the database. In our case, an insert will trigger execution of a function.

Figure 1. Trigger Configuration

Building Your Application

Let’s take a look at how all the pieces of this application fit together –

Figure 2. Stitch Architectural Diagram
  1. In step 1, an application accepts input either from a user or as a result of some action the user performed (using geofencing, for example.) The input, in our case, will be the name of a business. The application will insert a document with the name of the business into MongoDB.
  2. The firing of the trigger is automatic because we configured it to watch for inserts or updates to our database.
  3. The trigger executes a custom function called getGooglePlaceInfo then captures and forwards the entire inserted document.
  4. Next, in step 4, the function we created invokes the HTTP Webhook we created. The webhook conducts the conversation between Google Places and Stitch.
  5. In step 5, Google Places will respond with a JSON document containing the requested information.

The function will catch this JSON information and update the MongoDB document. It is worth saying that the function can also manipulate the data before inserting it. Allowing it meet all your project requirements (format, types, calculations). As an example, the function may create a new GeoJSON object from the Google coordinates. All of this is done in step 6.

In Conclusion

We’ve taken a very brief look at how leveraging MongoDB Atlas, Stitch, and Triggers in conjunction with a data API service such as Google Places transforms applications into intelligent apps users will truly love to use. Because we’re adding data without having to bother the user, the application becomes much more usable, much more valuable. MongoDB Stitch and Triggers give your application the ability to react to changes in the database. Then leverage integration with external services to fetch in-context data to enrich your applications’ data further. This improves both usability and value to the user.

Without MongoDB Stitch, a developer would have had to contend with building an application server, dealing with management, availability, scalability, and backup and restoration of the data.

Oh, and did we mention that Stitch provides other benefits as well? It leverages Atlas security, adds third-party authentication and granular, field-level access controls to MongoDB data. This gives the ability for users to retrieve data anywhere. Without developers having to create REST APIs from scratch, secure and maintain them?

The content described in this blog article is publically available and can be found here: https://github.com/julienmongodb/mongodb-googleplaces

Introduction to Serverless Functions in MongoDB Stitch

Serverless and Functions as a Service are relatively new development paradigms that are gaining in popularity. Let's take a quick look at what MongoDB Stitch offers in this space.

Functions in Stitch are written in JavaScript ECMAScript and can be called from other scripts in Stitch, or from external JavaScript leveraging the client SDK. Here's an example of a function in Stitch:

Welcome to Hacktoberfest 2018!

Hacktoberfest is a month-long celebration of open source software, started originally by our friends at DigitalOcean, and held in partnership with GitHub and Twilio.

Creating a Data Enabled API in 10 Minutes with MongoDB Stitch

Creating an API that exposes data doesn’t have to be complicated. With MongoDB Stitch, you can create a data enabled endpoint in about 10 minutes or less.

At the heart of the entire process is MongoDB Stitch’s Services. There are several from which to choose and to create a data enabled endpoint, you’ll choose the HTTP Service with a Webhook.

Adding a Stitch Service

When you create an HTTP Service, you’re enabling access to this service from Stitch’s serverless functions in the form of an object called context.services. More on that later when we create a serverless function attached to this service.

Name and add the service and you’ll then get to create an “Incoming Webhook”. This is the process that will be contacted when your clients request data of your API.

Call the webhook whatever you like, and set the parameters as you see below:

We’ll create this API to respond with results to GET requests. Next up, you’ll get to create the logic in a function that will be executed whenever your API is contacted with a GET request.

Defining the Function

Before we modify this script to return data, let’s take a look at the Settings tab — this is where you’ll find the URL where your clients will reach your API.

That’s it — you’ve configured your API. It’s not going to do anything interesting. In fact, the default responds to requests with “Hello World”. Let’s add some data.

Assuming we have a database called mydatabase and a collection of contact data called mycollection, let’s write a function for our service:

Creating a function to return data from a collection in MongoDB Stitch

And here’s the source:

exports = function(payload) {
 const mongodb = context.services.get(“mongodb-atlas”);
 const mycollection = mongodb.db(“mydatabase”).collection(“mycollection”);
 return mycollection.find({}).toArray();
};

This exposes all documents in the database whenever a client calls the webhook URL associated with our HTTP Service. That’s it.

Let’s use Postman to show how this works. Grab your API Endpoint URL from the service settings screen. Mine is as follows — yours will differ.


https://webhooks.mongodb-stitch.com/api/client/v2.0/app/devrel-mrmrq/service/api/incoming_webhook/webhook0

Paste that into the GET URL field and hit Send, you should see something similar to the following:

Check out the GitHub Repository to review the code and try it yourself and review the screencast where I create a data enabled API in 10 Minutes with MongoDB Stitch.

Want to try this for yourself? Sign up for a free MongoDB Atlas account. Looking to leverage an API for integration with MongoDB? Read Andrew Morgan’s article on Building a REST API with MongoDB Stitch.

Additional Resources:

Hacking for Resilience with MongoDB Stitch at PennApps XVIII

Michael Lynn

Community, Events

Hosted and run by students at The University of Pennslyvania, PennApps is billed as “The original hackathon.” The eighteenth iteration of the nation's first college hackathon kicked off on Friday, September 7th at 7:30 pm and with participants hacking away until Sunday, September 9th at 8:00 am.

MongoDB was a technology choice for many of the hackathon teams, and as the weekend progressed, participants leveraging MongoDB stopped by to share details of their projects.

One application that stood out immediately was pitched by its team as a “100% offline communication app” called Babble. The trio from Carnegie Mellon University spoke enthusiastically about the app they were developing.

“Babble will be the world’s first chat platform that is able to be installed, setup, and used 100% offline,” said Manny Eppinger, a Junior studying CS at CMU.

The Babble development team
From left to right: Manny Eppinger, Michael Lynn (MongoDB), Conlon Novak, and Aneek Mukerjee

In keeping with the PennApps XVIII theme of “HACK-FOR-RESILIENCE”, a critical design goal of Babble is to be able to support 100% offline utilization including application installation via near-field communication (NFC).

Imagine you’re in the midst of a disaster scenario and the internet infrastructure is damaged, or severely degraded. Communication into, and out of these areas is absolutely critical. Babble asks the questions:

  • What if you didn’t have to rely on that infrastructure to communicate?
  • What if you could rely on what you do have -- people, cell phones, and physical proximity?

Working in a peer-to-peer model, each Babble user’s device keeps a localized ledger of all messages that it has sent and received, as well as all of the ledgers of each device that this instance of Babble has been connected directly to via Android Nearby Connections.

The team leveraged MongoDB Stitch and MongoDB Mobile, now in beta to ensure that the app will capture and store chats and communication from its users and when a connection becomes available, automatically sync with the online version of the database.

Babble Stitch Diagram

As hackathon mentors and judges for the event, my team and I were so impressed with the team's vision, and with their innovation that we chose them as recipients of the Best Use of MongoDB Stitch award which includes a prize package valued at $500.

Whether you’re a student hacker, or an engineer simply looking to get your brilliant app idea off the ground, I’d strongly encourage you to take a look at MongoDB Atlas, MongoDB Stitch, and MongoDB Mobile to help you accelerate your innovation cycle and reduce the amount of time you need to spend building and managing servers and replicating boilerplate code.

Check out project Babble on Devpost.
Are you a developer, advocate or similar with a combination of excellent coding and communication skills and a passion for helping other developers be awesome? We’re hiring at MongoDB and we’d love to talk with you.