node.js - Mongoose: assign field of type 'array of Strings' -
node.js - Mongoose: assign field of type 'array of Strings' -
i'm using array of strings save emails:
var user = new schema({ // other fields... emails: [string] });
have troubles updating field. say, email1 , email2 values receive view: works well:
user.emails = [email1, email2]; user.save(); // fields updated,
and doesn't:
user.emails[0] = email1; user.emails[1] = email2; user.save(function(err, saveduser) { console.log(saveduser.emails); // updated array [email1, email2] // if retrieve user, 'emails' field not have above changes. });
but, strangely, works:
user.emails = [email1]; user.emails[1] = email2; user.save(); // user.emails == [email1, email2];
can explain why happening?
it's not documented, when manipulating array fields need create sure you're triggering mongoose's field alter detection knows array has been modified , needs saved.
directly setting array element via index in square brackets doesn't mark modified have manually flag using markmodified
:
user.emails[0] = email1; user.markmodified('emails');
or can in 1 go, using set
method of mongoose array:
user.emails.set(0, email1);
overwriting entire array field triggers why works you:
class="lang-javascript prettyprint-override">user.emails = [email1, email2];
as as:
class="lang-javascript prettyprint-override">user.emails = [email1]; user.emails[1] = email2;
which means works:
class="lang-javascript prettyprint-override">user.emails = []; user.emails[0] = email1; user.emails[1] = email2;
node.js mongodb express mongoose
Comments
Post a Comment