Mongoose: Document.toObject () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдорд╛рд░реНрдЪ 2015  ┬╖  24рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ _id toObject() рдХреЗ рдмрд╛рдж рднреА рдПрдХ ObjectId рд╣реИ

рдХреНрдпрд╛ рдЗрд╕рдХреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЛрдВрдЧреЛ рдХреА рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреЗрджрдЬрдирдХ рд╣реИ

рд╕рднреА 24 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣реА рдмрдЧ рд╣реИред toJSON() рдФрд░ toObject() рджреЛрдиреЛрдВ $ ObjectId рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдЕрднреА рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ObjectIds рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рддрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ JSON.parse(JSON.stringify(doc)); рд╣реЛрдЧрд╛ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдХреНрдпрд╛ рд╣реИ?

рддреЛ, рдлрд╝рдВрдХреНрд╢рди toJSON() рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? _id рдФрд░ рджрд┐рдирд╛рдВрдХ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ?

рд╡реИрд╕реЗ, toObject() рдФрд░ toJSON() рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
рдзрдиреНрдпрд╡рд╛рдж!

toJSON() + toObject() рдХреЗ рдмрд╛рдж рд╣рд╛рдБ date рдЕрднреА рднреА рдПрдХ рддрд╛рд░реАрдЦ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВред

toJSON() рдФрд░ toObject() рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк JSON.stringify(doc) рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ toJSON() рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╕реНрддреБред рддреЛ toJSON() JSON.stringify() рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИред

@ vkarpov15 рдПрдХ рдмрдВрдж рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрдЧрд╣ рд▓рдЧ рд░рд╣реА рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реАрдзреЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдореИрдВ рдЙрдирдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдПрдХ рднрд┐рдиреНрди рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдиреЗрд╡рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдСрдмреНрдЬреЗрдХреНрдЯрд┐рдб рдХреА рддреБрд▓рдирд╛ рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдВрдЧреЗ, рднрд▓реЗ рд╣реА рдЙрдирдореЗрдВ рдПрдХ рд╣реА рдЖрдИрдбреА рд╣реЛред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдореИрдВ рдЗрд╕реЗ рдЕрдм рддрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:

var objectdiff = require('object-deep-diff');

var diffresult = objectdiff(
  JSON.parse(JSON.stringify(doc1.toObject())),
  JSON.parse(JSON.stringify(doc2.toObject()))
);

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкрд╛рдиреЗ рдХрд╛ рдПрдХ рдорд╣рдВрдЧрд╛ рддрд░реАрдХрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдиреЗрд╡рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рдордЬрд╝рдмреВрддреА рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рддрдирд╛ рдЧрд╣рд░рд╛ рдЕрдВрддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдореЛрдВрдЧреЛрдбрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореБрджреНрджреЛрдВ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред _id рдФрд░ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯрд┐рдб рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╛ рдмрд╕ рд▓реЙрд╢ рдХреА рдЧрд╣рд░реА рд╕рдорд╛рдирддрд╛ рдЬрд╛рдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

@ vkarpov15 рдЧрд╣рд░рд╛ рдЕрдВрддрд░ рд╕рдорд╛рдирддрд╛ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд▓реЙрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:
https://github.com/rbs392/object-deep-diff/blob/master/index.js

рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдПрд░реЗ рдФрд░/рдпрд╛ рдЕрдиреНрдп рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ рдХрд╛рдо рднреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ..: /

рддреЛ рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реИ, рдХреНрдпрд╛ рдЖрдк 2 рдиреЗрд╡рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдпрд╛ 2 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдкрд░ рдбреАрдк-рдбрд┐рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ toObject() рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ? рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреВрд░реНрд╡ рдХреЛ рдЗрддрдирд╛ рдирд╣реАрдВред

@ vkarpov15 рдпрд╣ рдЖрдорддреМрд░ рдкрд░ 1 рдиреЗрд╡рд▓рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (.toObject рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд) рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рддреБрд▓рдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреЛ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореИрдВ рдПрдХ рдиреЗрд╡рд▓рд╛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдпрд╣ рдбреАрдк-рдбрд┐рдл рдЪреЗрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдбреЙрдХреНрд╕ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ JSON.parse(JSON.stringify(doc.toObject()) рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред ) рджреЛрдиреЛрдВ рдбреЙрдХреНрд╕ рдкрд░ред

рд╣рд╛рдБ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ JSON.parse(JSON.stringify()) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред

JSON.parse(JSON.stringify()) рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд░реВрдк рд╕реЗ рдЧрд╣рди рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдкреВрд░реНрдг-рд╕реЛрдЪ lib рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛ред

var transformProps = require('transform-props');

function castToString(arg) {
    return String(arg);
}

var doc = new MongooseModel({ subDoc: { foo: 'bar' }});
var docObj = doc.toObject();

transformProps(docObj, castToString, '_id');

console.log(typeof docObj._id); // 'string'
console.log(typeof docObj.subDoc._id); // 'string'

рдореЛрдВрдЧреЛ рдХреА рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреЗрджрдЬрдирдХ рд╣реИ

@ZacharyRSmith рдлрд┐рд░ рдЕрдиреНрдп рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЬреИрд╕реЗред рд▓реЗрдЦрдХ_рдЖрдИрдбреА (рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ)/author_ids (рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреА рд╕рд░рдгреА)?

@ рдлреНрд▓рд╛рдЗрдЯ 9 рдЖрдк рдХрдИ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдордкреНрд░реЙрдкреНрд╕() рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://github.com/ZacharyRSmith/transform-props/blob/master/index.test.js#L67

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдЪрд╛рд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function myToString(val) {
  if (Array.isArray(val)) {
    return val.map(item => String(item));
  }
  return String(val);
}

transformProps(obj, myToString, ['author_id', 'author_ids']);

@ZacharyRSmith рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╛рдж рдЖрдИ: рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝реАрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬреЛ рдЯреВрд▓ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рдореЙрдбрд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВред
рддреЛ рдХрдИ рдШрдВрдЯреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:

const ObjectID = require('mongodb').ObjectID;

/**
 * Convert ObjectId field values inside an object to String type values
 * (includes array of ObjectIds and nested ObjectId fields)
 * <strong i="9">@param</strong> obj Object - The Object to be converted.
 * <strong i="10">@return</strong> none
 */
function objectIdtoString(obj) {
  for(let k in obj) {
    let v = obj[k];
    if(typeof v == 'object') {
      if(k.endsWith('_id') && v instanceof ObjectID) {
        obj[k] = v.toString();
      }
      else if(
        k.endsWith('_ids') && Array.isArray(v) &&
        v.length > 0 && v[0] instanceof ObjectID
      ) {
        let vs = [];
        for(let iv of v) {
          vs.push(iv.toString());
        }
        obj[k] = vs;
      }
      else {
        objectIdtoString(v);
      }
    }
  }
}

// Call example
objectIdtoString(obj):

@vkarpov15

рд╣рд╛рдБ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ JSON.parse (JSON.stringify ()) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред

https://medium.com/ft-product-technology/this-one-line-of-javascript-made-ft-com-10-times-slower-5afb02bfd93f

рдЯреАрдПрд▓рдбреАрдЖрд░; JSON.parse(JSON.stringify()) рдПрдХ рд╕рдордХрд╛рд▓рд┐рдХ, рдЕрд╡рд░реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдЧрдВрднреАрд░ рдЕрдбрд╝рдЪрдиреЗрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХреГрдд/рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдЖрдкрдХреЛ mongoose.Types.ObjectId.prototype.toJSON = function() { return this.toString(); рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╡рд╣ рд▓реЗрдЦ рднреА рдХрд╣рддрд╛ рд╣реИ, JSON.parse(JSON.stringify) рдбреАрдк рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рддреЗрдЬрд╝ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рд╡реЗ рдмрд╛рд░-рдмрд╛рд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдбреАрдк рдХреНрд▓реЛрдирд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рдереЗ

рддреЛ, рдпрд╣рд╛рдБ 2019 рд╣реИред
рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рд╣реЗрдХреНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рд╛рдл рдФрд░ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИ?

@gitowiec

mongoose.ObjectId.get(v => v.toString());

рджреЗрдЦреЗрдВ: http://thecodebarbarian.com/whats-new-in-mongoose-54-global-schematype-configuration.html#schematype -getters

@ vkarpov15 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рджреБрдмрд▓рд╛' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред
рддреЛ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рджрд╛ рдЬреЗрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рдЕрднреА рднреА lean рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде JSON.parse(JSON.stringify()) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдпрд╛ рд╕рдВрднрд╡рддрдГ рдПрдХ рджреБрдмрд▓рд╛ рдкреНрд▓рдЧрдЗрди: https://www.npmjs.com/package/mongoose-lean-objectid-string

@nhitchins рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЛ mongoose-lean-getters рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@ vkarpov15 рдХреНрдпрд╛ рдпрд╣ рднреА рдПрдХ рд╡рд┐рднреЗрджрдХ рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрдзрд╛рд░ рд╕реНрдХреАрдорд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рд╡реЗрд░рд┐рдПрдВрдЯ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдкрд░ рдЧреЗрдЯрд░реНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдореИрдВ рд▓реАрди () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдиреЗрд╡рд▓реЗ-рд▓реАрди-рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрд╛ред

@pwrnrd рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдЕрдВрдХ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕реЗ рдПрдХ рд╡рд┐рднреЗрджрдХ рд╕реНрдХреАрдорд╛ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

CodeurSauvage picture CodeurSauvage  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wlingke picture wlingke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

adamreisnz picture adamreisnz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

efkan picture efkan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

varunjayaraman picture varunjayaraman  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ