Essayer de mettre à jour un document dans un tableau en utilisant $ set mais il semble que cela doit être fait différemment. Voici le code que j’essaye:
Schema.update({ _id: id, 'customers._id': customerID }, { $set: { 'customers.$.addresses.isDefault': false }}, function (err) { if (err) // err // do something });
Il semble que cela ne ressemble pas à “clients. $. Adresses.isDefault”. Mes données ressemblent à ceci:
{ _id: ObjectId, customers: [{ _id: ObjectId, addresses: [{ _id: ObjectId, isDefault: Boolean }] }] }
J’essaie de définir isDefault pour toutes les adresses de ce client sur false.
UPDATE: Voici l’erreur qu’elle m’a générée: MongoError: impossible d’utiliser la partie (adresses de customers.0.addresses.isDefault) pour parcourir l’élément.
Fini juste en boucle à travers le tableau
Schemas.Client.findOne({ _id: id, 'customers._id': customerID }).select('customers.$.addresses').exec(function (err, client) { if (err) { return next(err); } if (!client) { return next(); } if (client.customers[0].addresses.length) { var addresses = client.customers[0].addresses; for (var i = 0; i < addresses.length; i++) { addresses[i].isDefault = false; } client.save(function (err) { if (err) { return next(err); } // finish }); } });