I'm trying to follow the filtered positional operator $ to update an a field in a target subdocument stored in array like this :
trainings : [ { "title": "bonjour", "category": "clochard", "_id": "5a3bee028e3f660b30382a21" }, { "title": "Controlleur", "category": "Métro sahel", "_id": "5a3c0378c52add202218b199" }, { "title": "Controlleur", "category": "Métro Tunis", "_id": "5a3c0380c52add202218b19a" }, { "title": "Takwira", "category": "sport", "_id": "5a3c038ac52add202218b19b" } ]
This is my query implemented with mongoose (trainings is a field in User model):
User.findByIdAndUpdate(user._id, { $set: { "trainings.$[element].content": req.body } },
{ arrayFilters: [ { "element._id": req.params.courseId } ],upsert: true},function (err, updatedTrainings)
{
if (err)
{
console.log(err);
}
res.json({success:true,message:"Training updated succfully",body:updatedTrainings});
});
I get this error:
{ MongoError: exception: cannot use the part (trainings of trainings.$[element].content) to traverse the element ({trainings: [ { slugs: [], createdAt: new Date(1513876994108), _id: ObjectId('5a3bee028e3f660b30382a21'), content: { title: "bonjour", category: "clochard" }, path: "bonjour-clochard-664" }, { slugs: [], createdAt: new Date(1513882488053), _id: ObjectId('5a3c0378c52add202218b199'), content: { title: "Controlleur", category: "Métro sahel" }, path: "Controlleur-Métro sahel-505" }, { slugs: [], createdAt: new Date(1513882496517), _id: ObjectId('5a3c0380c52add202218b19a'), content: { title: "Controlleur", category: "Métro Tunis" }, path: "Controlleur-Métro Tunis-887" }, { slugs: [], createdAt: new Date(1513882506039), _id: ObjectId('5a3c038ac52add202218b19b'), content: { title: "Takwira", category: "sport" }, path: "Takwira-sport-833" } ]}) at Function.MongoError.create (/home/developer/takwinland/backend/app/node_modules/mongodb-core/lib/error.js:31:11) at /home/developer/takwinland/backend/app/node_modules/mongodb-core/lib/connection/pool.js:497:72 at authenticateStragglers (/home/developer/takwinland/backend/app/node_modules/mongodb-core/lib/connection/pool.js:443:16) at Connection.messageHandler (/home/developer/takwinland/backend/app/node_modules/mongodb-core/lib/connection/pool.js:477:5) at Socket. (/home/developer/takwinland/backend/app/node_modules/mongodb-core/lib/connection/connection.js:331:22) at emitOne (events.js:125:13) at Socket.emit (events.js:221:7) at addChunk (_stream_readable.js:265:12) at readableAddChunk (_stream_readable.js:252:11) at Socket.Readable.push (_stream_readable.js:209:10) at TCP.onread (net.js:598:20)