Trying to update a document in an array using $set but it looks like it needs to be done a different way. Here is the code I am trying:
Schema.update({ _id: id, 'customers._id': customerID }, { $set: {
'customers.$.addresses.isDefault': false
}}, function (err) {
if (err) // err
// do something
});
It looks like it doesn't like 'customers.$.addresses.isDefault'. My data looks like this:
{
_id: ObjectId,
customers: [{
_id: ObjectId,
addresses: [{
_id: ObjectId,
isDefault: Boolean
}]
}]
}
I am trying to set isDefault for ALL addresses on that customer to false.
UPDATE: Here is the error it gives me: MongoError: cannot use the part (addresses of customers.0.addresses.isDefault) to traverse the element
Ended up just looping through the array:
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
});
}
});