How to Build a MongoDB GUI in 4 StepsBy: Ronan McQuillanSep 22, 2022 | 13 minutes readMongoDB is an amazing NoSQL database technology. But it can get quite tricky to add or retrieve information from it. Thatâs why a MongoDB GUI (graphical user interface) is a handy tool.NoSQL by itself can have a steep learning curve. Instead of regular tables and rows, you have collections and documents. And unlike rows that have the same columns by definition, documents can be completely different within a collection.Thus, a GUI can make NoSQL data management much easier. But these tools can be complex by themselves. Some require users to know the exact JSON notation to filter data. Others have complex interfaces that are hard to navigate.And sometimes you just need something simple.Today weâre going to build a MongoDB GUI without coding. This might sound like a complex task, but youâll see that you can have a very good tool for free in just 4 steps.The goal here is to create a tool that allows you to see your data in a table view, but also as cards so youâll see all your data at once. Also, you can create a MongoDB GUI that allows you to add new data, and delete data.In the meantime, you also learn how you can use Budibase to do all these tasks. This means that you can build not just a MongoDB GUI, but other GUI or even custom apps.Letâs get started!Is there a GUI for MongoDB?There are many GUI options for MongoDB. Options include MongoDB Compass, Robo3T, Studio3T, Moon Modeler, and NoSQL Manager. But you can build your own tool within minutes with a low-code app builder such as Budibase.This allows you to create a GUI that does exactly what you want, for free. So you donât need to install any software and you can use it on any devices you want, even mobiles.What is a MongoDB GUI?A MongoDB GUI allows you to interact with your MongoDB databases, collections, and documents visually. This means that you can search, add, edit and delete data even if you donât know the commands to do so.Here is what your free MongoDB GUI app will look like if you follow this tutorial:This is the first screen you see when you load your app. In it, youâll see your data and you can search using the dynamic filters. You can click on âeditâ to modify a document, and you can click on âadd newâ to create new documents.Here you can edit documents or create new ones. This screen has the same schema as the previous one, which is a faster and simpler approach to add just the data you need.This screen has the same objective as the first one - viewing your data.But thereâs a difference, in this screen you arenât bound to a specific schema. This means that you can see all data for each of your documents, even if they have different fields. If you click on âeditâ youâll see the simpler edit screen, but the âadd new entryâ button brings a different page.This is the form to add a new item. It might seem quite similar to the previous one, but notice how the customer data doesnât have a field. Thatâs because this is a screen in itself.Here it is:This is a modal screen where you can add customer details. Once you fill in this form and save the modal closes and the customer data is loaded to the new card form:With this method, you can take full advantage of nested elements in your documents. Instead of a simple structure, you can add objects to them.Now letâs see you you can implement this app in four easy steps.1. Create your app, and connect to MongoDBMongoDB and Budibase are free tools. Create your account in each of them, if you donât have these already.Now create a new app in Budibase and add MongoDB as your data source .If you donât know your connection string, you can find it in your MongoDB account .To complete your MongoDB connection, letâs create some queries. Our demo app has sales and customer data. We need six queries for it:Get_sales,Get_sales_unfiltered,Insert_sale,Insert_sale_unfiltered,Update_sale,Delete_sale.And here is what you need to do for each of them:Get_salesThis query reads your sales data. But this query returns specific, priority fields since we use it in the main table.You can use this setup:And in the transformers, use this JS code:return data.map( ({ _id, saleDate, storeLocation, customer }) => ({ “ID”: _id, “Date”: saleDate, “Location”: storeLocation, “Customer”: customer.email }) )If you run it, youâll see something like this in the preview:Get_sales_unfilteredThis query works just like the first one. But the difference is that this query loads all the sales data with no preset schema. It is useful for the cards view. You can duplicate the get_sales query and just remove the transformer.Insert_saleThis query creates new documents in your MongoDB database. It is also limited to the schema, so we are adding just a few fields for a simpler and more controlled approach.This is the general setup:Make sure to use the fields option correctly. This is what the MongoDB GUI uses to insert data coming from your form fields.Insert_sale_unfilteredYou can duplicate the insert_sale query and rename it to insert_sale_unfiltered. But this time, the entire customer object is added in the form modal.Thus you can use these fields instead:{ "saleDate": "{{Date}}", "customer": {{Customer}}, "storeLocation": "{{Location}}" } Update_saleThe update_sale query works the same way as the insert_sale query. The difference is that you need to pass the item ID to your MongoDB GUI so it can correctly update the document.Here is the base setup for it:And these are the fields:{ "_id": "ObjectID('{{ID}}')" }, { "$set": { "saleDate": "{{Date}}", "customer.email": "{{Customer}}", "storeLocation": "{{Location}}" } } Delete_saleThe delete_sale query searches for an element and then deletes it. Make sure to use the delete_one action for it. Here is the setup:Thatâs all you need in terms of queries. Now, letâs turn to our app UI design .2. Home screenHead over to the âdesignâ tab. Before adding screens, you can use the âthemeâ options to change your app to the dark theme. Thatâs what we did in our example.Next, click on âscreensâ and âadd screenâ:Letâs create a blank screen for now.The home screen is quite simple in terms of how it loads data. These are its components and their hierarchy:Add new button - to navigate to the ânew saleâ screen.Data provider - with the get_sales query to load sales with ID, Date and Customer email:Dynamic Filter - this allows your users to filter through the sales and find a specific sale they want to view,Table - this component shows sales in a table format,Edit button - if your user clicks on it, they are redirected to the edit form.Click on âComponentsâ (second icon on the left side) > â_Add Componen_tâ. Or, use the big blue plus icon at the button to add new components to your screen. Select the button component.Then add a name and label to it, such as âAdd newâ. Then use the âOnclick actionsâ to add an action to navigate to the /home/0 path.This might seem strange, but we are using the path as a variable on the edit screen. It means that anything after /home/ is read as a variable.Therefore, on the edit screen, we can get this variable ( â0â in this case ) and run some actions.The most important actions are to show the edit and add new forms, as well as loading items with a valid ID, so that we can pre-populate the fields with the current sale data.Now you can add a Data Provider component. This component loads our queries. Load the get_sales query in it and your data is ready to be used.Next, add a dynamic filter component. This wil automaticallyl understand the fields from your database schema .Itâs time to add a table component and again youâll see that there are no changes needed on it. It loads your data automatically.You can add a button inside of the table component so that your components tree looks like this:This button is quite similar to the âadd newâ button. But it should edit elements. Thus we need to pass the current rowâs ID to the path. Set up its on-click actions like this:The {{ Sales.get_sales.ID }} binding is what loads the ID value for the current item in the Sales table, which loads the get_sales query.Now letâs create your add new / edit forms.3. Add new and edit formsThe home buttons are loading the /home/{{id}} path. To make sure that Budibase understands this, you can create a new screen and use this route - /home/:id. This automatically creates a new variable that you can load with {{ URL.id }}.The logic behind the add new and edit forms is this:If the ID is different than zero:Hide the add new form.If the ID is equal to zero:Hide the update form.Since components are visible by default we need this reverse logic to hide them.You can do these visual switches with display conditions. So in your ânew sale formâ component youâll add a condition to hide component if {{ URL.id }} isnât equal to 0. And the other way around for the update container.The elements tree for that page looks like this:The âNew Sale Formâ is a simple form with text fields in it. You can add the fields for the customer, location, and a date picker.Make sure to use the label and name options for these fields, like this:Then, add a button component. In it, you can add an action to execute the insert_sale query. This query gets the form fields and passes them to the query bindings, like this:Another action you can add is to navigate to the home screen after the query succeeds.The update form needs some default data for the current items. You can do this by loading the Sale data provider, which is just the get_sales query with a filter to display only the sale that matches the current ID.Here is an example:Then you add a repeater and the form inside of it. With this repeater the query fields are easily available. For example, in the headline component for that section you can use this text:Edit Sale {{ Repeater.get_sales.ID }}.And you can repeat this process for all fields, using the bindings as the default values, like this:The update button is quite similar to the âadd newâ button. The difference is that you need to pass the item ID in addition to the form fields:And now your basic actions are ready. Letâs think about how to add a bit of spice to your MongoDB GUI.4. Cards view and creationIf you want to see all data from your components, itâs hard to use a table component. Thatâs because a table assumes a fixed schema, just like in a regular SQL database. This doesnât reflect the complexity of NoSQL data models .But you can achieve the same results with a data provider and a repeater. So instead of using a premade table, you can build your own components whether you want them to look like a table or not.Cards view screenCreate a new screen with the /cards route. Its structure is just like the homepage, but instead of just using a table we use a repeater and some other components. This is the elements tree:The add new button is the same as the previous one. But this time, set the onclick action to /cards/new.Instead of using the get_sales query, use the get_sales_unfiltered now. This allows you to access all the sales data from any of your sales.The dynamic filter component works the same way, and itâs powerful as ever.Then youâll use a repeater instead of the table. You can add multiple items per line by changing the direction of the repeater. Also, you can make all items to have the same height by changing the vertical alignment, like this:Then the internal components can use the repeater data as bindings. For example, the sale headline is this:_#{{ Repeater.get_sales_unfiltered.id }}You can use binding helpers for simple operations. For instance, you can output the date value in a custom format using this binding:{{ date Repeater.get_sales_unfiltered.saleDate “DD-MM-YYYY” }}The edit button loads the previously created edit screen for a simpler approach. So its onclick action is to navigate to _/home/{{ Repeater.get_sales_unfiltered.id }}.Now you can output the entire sales data by using a JS function instead of a binding. Like this:This is the JS code:var row = $("Repeater.Row Index"); row = $("Data Provider.Rows")[row]; var ret = ""; Object.entries(row).forEach(([key, val]) => { ret += "" + key + ":\n"; ret += JSON.stringify(val, null, "\t"); ret += "\n\n"; }); return ret; This function is running through each of the sales properties, it outputs the property name and a string version of the property value.New Cards & Customer Data ScreensFor this tutorial, weâre just creating new items, but you can use a similar approach to update items or even add more sales data in your MongoDB GUI.Letâs start with the customer data screen. Create a new screen with the customer-data route. In it, youâll use this components tree:Itâs quite similar to the previous form pages. It has some options pickers and you can use custom options in them, like this:The real magic of this form is in the âsaveâ button. These are the onclick action that youâll use:So, once you click this button the entire customer data is saved in an app state. These are variables in your app that you can use to store data and use it between different screens.Since the form data is passed as a JSON it is in the perfect format to use in your insert query.Then, thereâs a close-screen modal action. This allows you to just close this form and go back to the add new form.Now create a new screen with the /cards/new route. This is the components tree for that screen:The logic here is quite similar to the previous forms. So the fields should be almost the same.The main difference is that the customer data is created in that other screen. Thus, your button is going to load that screen in a modal:And thatâs all you need. Now use this onclick action for the âadd cardâ button:Notice how the customer data is sent as JSON data. This should be enough to correctly save all your customer data in your MongoDB GUI.How to build a MongoDB GUIToday we looked into how you can create your own MongoDB GUI. This allows you to create a tool to easily interact with your MongoDB data, using visual components, and for free.In addition, we explored many aspects of app creation. You learned how to create screens and queries, how to save data, how to use app states, and how to send data between different screens.We hope youâve enjoyed it, and see you again next time!Check out our in-depth guide to database GUIs .To get a broader view of everything that Budibase can do, why not check out our 50+ free, deployable app templates ?