node.js - Default value not set while using Update with Upsert as true -



node.js - Default value not set while using Update with Upsert as true -

i have next model users:

var userschema = new mongoose.schema({ name: string, dob: date, sex: string, photo: string, email: {type: string, index: {unique: true, required: true}}, created: {type: date, default: date.now} }); var user = mongoose.model('users', userschema);

as can see 'created' field takes default value of current date automatically set when new user created.

i utilize next query when user details posted:

user.findoneandupdate({email: user.email}, user, {upsert: true}, function (err, user) { if (err) { homecoming callback (err); } else { callback(null, user); } });

the purpose of using findoneandupdate upsert: true either homecoming existing profile, or create new one. updates fields based on info posted.

however, created field gets updated current date each time, though created field not posted. how can create sure field set once?

edit

an illustration object database:

{ "_id" : objectid("54620b38b431d48bce7cab81"), "email" : "someone@google.com", "__v" : 0, "name" : "somone", "sex" : "male" }

it turns out created field not beingness set while creating new object using upsert. mongoose returns current date based on schema though not exist in document.

so, question becomes: how create sure using upsert creates default value field not supplied in arguments?

findoneandupdate sends mongodb findandmodify request (see findoneandupdate). means skips mongoose magic involved schema setters, getters, defaults, etc. validation run on create/save way around .findone(), check existence/create new one, , .save().

see issue more discussion

edit:

in regards first question changing date each time, alter schema bit. rid of default value, , instead add together after declaring schema:

userschema.pre("save", function (next) { if (!this.created) { this.created = new date(); } next(); });

that create date if created: value not present, , should prevent changing creation date each time (when using .save()).

see mongoose middleware

node.js mongodb mongoose mongodb-update

Comments

Popular posts from this blog

assembly - What is the addressing mode for ld, add, and rjmp instructions? -

vowpalwabbit - Interpreting Vowpal Wabbit results: Why are some lines appended by "h"? -

Is there a way to convert an HTML page styled with Bootstrap CSS into email-compatible html? -