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?
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 }
});