Sling Academy
Home/Python/MongoEngine: How to insert one or multiple documents

MongoEngine: How to insert one or multiple documents

Last updated: February 12, 2024

Overview

MongoEngine is a Document-Object Mapper (DOM) for working with MongoDB from Python. It translates the objects in your code into documents stored in MongoDB and vice versa, allowing for an intuitive interaction with the database in a highly Pythonic manner. This tutorial dives into how you can insert one or multiple documents into a MongoDB collection using MongoEngine. We’ll cover the basics, provide numerous code examples, and explore some best practices. Whether you’re new to MongoEngine or looking to sharpen your skills, this guide will offer valuable insights.

Getting Started

Before you can insert documents, ensure that MongoEngine is installed and correctly configured in your project. If you haven’t done so, you can install MongoEngine by running:

pip install mongoengine

Then, you’ll need to establish a connection with your MongoDB instance:

from mongoengine import connect
connect('your_db_name', host='mongodb_host', port=27017, username='your_username', password='your_password')

Replace ‘your_db_name’, ‘mongodb_host’, ‘your_username’, and ‘your_password’ accordingly with your MongoDB credentials.

Defining Document Schemas

With MongoEngine, each document in the database is represented as a class that inherits from Document. You define the fields of your document similar to how you’d define class attributes, but using MongoEngine’s field types. Here’s an example:

from mongoengine import Document, StringField, IntField

class User(Document):
    name = StringField(required=True)
    age = IntField(required=True)
    email = StringField()

Each field type, such as StringField or IntField, carries validation according to its nature, ensuring data integrity.

Inserting a Single Document

To insert a single document, you instantiate your document class with the desired data and call the save method. Here’s how:

user = User(name='John Doe', age=30, email='[email protected]')
user.save()

This creates a new document in the User collection with the specified fields. The save method inserts the document if it doesn’t exist or updates it if it does, based on the primary key, typically the _id field.

Inserting Multiple Documents

When it comes to inserting multiple documents, MongoEngine provides the insert method, which belongs to the Document class. This method is efficient as it inserts all given documents in a single operation, rather than one at a time. Here’s an example using our User class:

users = [
    User(name='Alice', age=25, email='[email protected]'),
    User(name='Bob', age=20, email='[email protected]'),
    User(name='Charlie', age=35)
]
User.objects.insert(users)

This will insert the three User documents into the collection. Note that insert does not validate the documents by default, so ensure your data is correct and valid before calling it.

Field Validation

As mentioned earlier, MongoEngine field types enforce data validation. This is pivotal when inserting documents to maintain data integrity. Validation occurs automatically when using the save method but not with insert. To manually invoke validation when using insert, iterate over your list of documents and call the validate method on each:

for user in users:
    user.validate()

After ensuring all documents are valid, you can then safely insert them into the database.

Best Practices

When working with MongoEngine and document insertion, keep the following best practices in mind:

  • Schema Design: Thoughtfully design your document schemas to reflect the data’s nature and intended use within your application. Well-defined schemas are crucial for data integrity and performance.
  • Validation: Leverage MongoEngine’s built-in validation features to ensure that your data is correct before insertion. This minimizes potential issues and maintains database integrity.
  • Bulk Operations: Prefer using insert for bulk document operations to enhance performance. Bulk inserts are significantly faster and more efficient than multiple single-document insertions.

Conclusion

MongoEngine offers a robust and intuitive way to work with MongoDB from Python. By following the outlined steps for document insertion, you can effectively interact with your database, whether you’re dealing with single documents or massive datasets. Remember the best practices and validation strategies to maintain a healthy, high-performing database. Happy coding!

Next Article: MongoEngine: How to update a document by ID

Previous Article: MongoEngine: How to exclude fields from query results

Series: Data Persistence in Python – Tutorials & Examples

Python

You May Also Like

  • Python Warning: Secure coding is not enabled for restorable state
  • Python TypeError: write() argument must be str, not bytes
  • 4 ways to install Python modules on Windows without admin rights
  • Python TypeError: object of type ‘NoneType’ has no len()
  • Python: How to access command-line arguments (3 approaches)
  • Understanding ‘Never’ type in Python 3.11+ (5 examples)
  • Python: 3 Ways to Retrieve City/Country from IP Address
  • Using Type Aliases in Python: A Practical Guide (with Examples)
  • Python: Defining distinct types using NewType class
  • Using Optional Type in Python (explained with examples)
  • Python: How to Override Methods in Classes
  • Python: Define Generic Types for Lists of Nested Dictionaries
  • Python: Defining type for a list that can contain both numbers and strings
  • Using TypeGuard in Python (Python 3.10+)
  • Python: Using ‘NoReturn’ type with functions
  • Type Casting in Python: The Ultimate Guide (with Examples)
  • Python: Using type hints with class methods and properties
  • Python: Typing a function with default parameters
  • Python: Typing a function that can return multiple types