How to insert a field in an existing document in MongoSH

51 views Asked by At

I've to insert a new field with a boolean value in some documents in the students collection with the following structure:

{
  _id: ObjectId("61c9cffcf9b7043141272c5b"),
  createdAt: 2021-12-27T14:38:52.025Z,
  updatedAt: 2022-07-26T10:12:56.887Z,
  deletedAt: null,
  fullName: 'Karina Kuznetsova',
  address: 'Chicago IL',
  Major:'Computer Science',
  __v: 0,
}

I'm running the following query in MongoSH locally in Mongo Compass:

db.students.aggregate([
    {
        $match: { 
            "_id": ObjectId('61c9cffcf9b7043141272c5b')
        }
    },
    {
        $set: { "transferred": true }
    }   
]);

I'm expecting the field to be added to the document like this:

{
  _id: ObjectId("61c9cffcf9b7043141272c5b"),
  createdAt: 2021-12-27T14:38:52.025Z,
  updatedAt: 2022-07-26T10:12:56.887Z,
  deletedAt: null,
  fullName: 'Karina Kuznetsova',
  address: 'Chicago IL',
  Major:'Computer Science',
  __v: 0,
  transferred: true
}

However, the original document remains the same, without the transferred field.

Option 2

I've also tried this way:

const studentsList = db.students.find({
    "_id": ObjectId('61c9cffcf9b7043141272c5b')
});

studentsList.forEach(student => {
    const result = db.students.updateOne(
        { _id: student._id },
        {
            $set: { "transferred": true }
        });
});

What am I doing wrong?

1

There are 1 answers

4
Yong Shun On BEST ANSWER

Use the update function instead to update the document.

The aggregate function is used to return the queried document, but will not update the existing document in the collection.

db.students.update(
    {
        _id: ObjectId('61c9cffcf9b7043141272c5b')
    },
    {
        $set: { "transferred":true }
    });