Writing and Updating Data in MongoDB Collections

Updating Specific Fields in a Collection

result = await SS_ClassRoom.update_one(
    {
        "$and": [
            {"Class_Room_Uid": self.Class_Room_Uid},
            {"Rucode": self.Rucode}
        ]
    }, 
    {
        "$set": {
            "LoginStatus": ConstStatusLogout  # 0 for logged out, 1 for logged in
        }
    }
)

Inserting New Documents into a Collection

new_entry = {
    "StudentMid": p["StudentMid"],
    "StudentGroupMid": p["StudentGroupMid"],
    "AttendenceType": p["AttendenceType"],  # 1. normal, 2. late, 3. leave, 4. absent
    "Lessons": p["Lessons"],
    "Subject": p["Subject"],
    "PublicClass": p["PublicClass"],
    "PunchDateTime": datetime.strptime(p["PunchDateTime"], "%Y-%m-%d %H:%M:%S"),
    "CreateDateTime": datetime.utcnow()
}

try:
    existing_record = await SS_AttendenceLog.find_one(filter=dupRecodFilter, sort=[('Created_Time', -1)])
    deletion_result = await SS_AttendenceLog.delete_many(filter=dupRecodFilter)
    insertion_result = await SS_AttendenceLog.insert_one(new_entry)
except Exception as ex:
    self.resData["failed"].append(p)
    continue

Understanding Upsert Behavior in MongoDB with PyMongo

The upsert option in MongoDB allows updating an existing document or inserting a new one based on a condition.

Example setup:

db.user.insert({"name":"user1", "age":12, "sex":"male"})
db.user.insert({"name":"user2", "age":13, "sex":"male"})
db.user.insert({"name":"user3", "age":14, "sex":"male"})

Query all records:

db.user.find()

Result:

{ "_id" : ObjectId("54c75876662ee1617463f0a3"), "name" : "user1", "age" : 12, "sex" : "male" }
{ "_id" : ObjectId("54c75880662ee1617463f0a4"), "name" : "user2", "age" : 13, "sex" : "male" }
{ "_id" : ObjectId("54c7588d662ee1617463f0a5"), "name" : "user3", "age" : 14, "sex" : "male" }

Perform an upsert update:

db.user.update({"name":"user1"}, {"$set":{"age":21}}, {"upsert":"true"})
db.user.find()

Result:

{ "_id" : ObjectId("54c75876662ee1617463f0a3"), "name" : "user1", "age" : 21, "sex" : "male" }
{ "_id" : ObjectId("54c75880662ee1617463f0a4"), "name" : "user2", "age" : 13, "sex" : "male" }
{ "_id" : ObjectId("54c7588d662ee1617463f0a5"), "name" : "user3", "age" : 14, "sex" : "male" }

Using $setOnInsert to set fields only during insert:

db.user.update({"name":"user1"}, {"$set":{"age":21}, "$setOnInsert":{"sex":"female"}}, {"upsert":"true"})
db.user.find()

Result (no change):

{ "_id" : ObjectId("54c75876662ee1617463f0a3"), "name" : "user1", "age" : 21, "sex" : "male" }
{ "_id" : ObjectId("54c75880662ee1617463f0a4"), "name" : "user2", "age" : 13, "sex" : "male" }
{ "_id" : ObjectId("54c7588d662ee1617463f0a5"), "name" : "user3", "age" : 14, "sex" : "male" }

New record insertion due to no match:

db.user.update({"name":"user4"}, {"$set":{"age":21}, "$setOnInsert":{"sex":"female"}}, {"upsert":"true"})
db.user.find()

Result:

{ "_id" : ObjectId("54c75876662ee1617463f0a3"), "name" : "user1", "age" : 21, "sex" : "male" }
{ "_id" : ObjectId("54c75880662ee1617463f0a4"), "name" : "user2", "age" : 13, "sex" : "male" }
{ "_id" : ObjectId("54c7588d662ee1617463f0a5"), "name" : "user3", "age" : 14, "sex" : "male" }
{ "_id" : ObjectId("54c75a07478a805237d087c3"), "name" : "user4", "age" : 21, "sex" : "female" }

Set a default integer value for all documents in a collection:

db.SS_School.update({}, {$set: {"AttendenceType": NumberInt(1)}}, {multi: true})

Using regex for pattern matching in MongoDB:

db.getCollection('SS_School').find({$or:[{"SchoolName":{$regex:"网络"},"SchoolId":{$regex:"340"}}]})

Filtering using dynamic search parameters:

if SearchFiled:
    _filter = {"$or": [{"SchoolName": {'$regex': SearchFiled}}, {"SchoolId": {'$regex': SearchFiled}},], 'AttendenceType': 1}
    count = await School.count(filter=_filter)
    SchoolRes = await School.find(filter=_filter, per_page=per_page, page=page)
else:
    _filter = {"AttendenceType": 1}
    SchoolRes = await School.find(filter=_filter, per_page=per_page, page=page)
    count = await School.count(filter=_filter)

Copying a Collection Between Databases on the Same Server

db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_database>')['<collection_name>'].insert(d); });

Renaming a Field in a MongoDB Document

db.getCollection('character').update({}, {$rename:{"desc":"DESC"}}, false, true)

Removing a Field from Documents

db.User.update({}, {$unset:{'address':''}}, false, true)

Tags: mongodb pymongo database UPDATE INSERT

Posted on Wed, 07 Oct 2026 16:10:00 +0000 by examancer