Mongoose: рдСрдмреНрдЬреЗрдХреНрдЯ w/рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдХреБрдВрдЬреА рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЬрдире░ 2012  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдХреНрдпрд╛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реИ? рдпрд╛рдиреА рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп:

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

рдХреБрдЫ рдРрд╕рд╛ рдХрд╣рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ:

var myschema = new mongoose.Schema({
   field : { *: String }
});

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рдирд╣реАрдВ рдкрддрд╛ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

рдпрд╣ рдлреАрдЪрд░ рдЬрд░реВрд░реА рд╣реИред

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

рд╡рд╣рд╛рдБ рдирд╣реА рд╣реИред

Mixed рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

@aheckmann - рдпрд╣реА рдореБрдЭреЗ рдбрд░ рдерд╛, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИ рдпрд╛ рдпрджрд┐ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕рдХреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

@TooTallNate - рдареАрдХ рд╣реИ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдорд┐рд╢реНрд░рд┐рдд рдХреЗ рд╕рд╛рде рд╣реИ рдЖрдк рд╕рднреА рд╕рддреНрдпрд╛рдкрди/рд╕реНрдХреАрдорд╛ рд╕рд╛рдордЧреНрд░реА рдЦреЛ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рдорд░реНрдерд┐рдд (рдирд╛рдорд┐рдд рдХреБрдВрдЬреА рдФрд░ рд╕рд░рдгреА) рдПрдореНрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рддреА рд╣реИред

@ordrin рдХреЛ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрддрдирд╛ рдЧреВрдврд╝ рдХреБрдЫ рдХрд░ рд░рд╣рд╛ рдерд╛! рд▓рд╛рдирдд рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред

рдореИрдВ рдПрдХ рдПрд╕реАрдПрд▓ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ _ids рд╣реИрдВ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВред

рдореИрдВ рдЙрди рдЖрдИрдбреА рдХреЛ рдЕрдкрдиреЗ рд╕рджрд╕реНрдп рдХреЗ рд╕рджрд╕реНрдп рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЬреЛ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЬрдмрдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреЗ "рдХрд╛рд░реНрдп" рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рддрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдбреАрдмреАрдЖрд░рдПрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЦреАрдВрдЪ рд╕рдХреВрдВред

@ordrin рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдорд┐рд╢реНрд░рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рд╣реИ? рдореИрдВрдиреЗ рдмреА/рд╕реАрдЖрдИ рдХреЛ "рдПрдореНрдмреЗрдбреЗрдб рдбреЙрдХреНрд╕" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореЛрдВрдЧреЛрдбреАрдмреА рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдорд┐рд╢реНрд░рд┐рдд рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

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

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

http://mongoosejs.com/docs/schematypes.html

рдореИрдВ рдмрд╕ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕реНрдХреАрдорд╛ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдХреБрдВрдЬреА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рд╕рддреНрдпрд╛рдкрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХреЗрдВред

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1ред

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ SO рдкреЛрд╕реНрдЯ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдХреБрдВрдЬреА рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрддрд╛ рд╣реИ рддреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред

рдЕрдЧрд░ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рддреЛ рдореИрдВ рдПрдХ рд╕реНрдХреАрдорд╛ рд▓реЗрдЖрдЙрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

рдЧрддрд┐рд╢реАрд▓ рдХреБрдВрдЬреА рд░рдЦрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рдЬреЗрд╕рди-рд╕реНрдХреАрдорд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

рдЧрддрд┐рд╢реАрд▓ рдХреБрдВрдЬреА рд╡рд╛рд▓реЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдпрд╛ рдЕрднреА рднреА рдирд╣реАрдВ?
2 рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдореЛрдВрдЧреЛрдбрдм рдбреЙрдХреНрд╕ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

:+1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

рдореБрдЭреЗ рдпрд╣ рдПрдХ рдХреБрдПрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ

+1

рдЙрди рдЕрд░реНрдерд╣реАрди +1 рдХреЛ рд░реЛрдХреЗрдВ, рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рдЗрдирдмреЙрдХреНрд╕ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред

рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП "рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ" рдФрд░ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдмрдЯрди рд╣реИрдВред

+1

@qqilihq , plx рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдлрд┐рд░ рд╣рдо +1 рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ, kthxbye

"рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА"
5 рд╕рд╛рд▓ рдмрд╛рдж, рдПрдХ рдЯрди +1 рдХреЗ рдмрд╛рдж, рдЕрднреА рднреА рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реИ?

рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ рдФрд░ #1522 рдХреЛ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВред

рдпрд╣ рдлреАрдЪрд░ рдЬрд░реВрд░реА рд╣реИред

рдпрд╣ рдлреАрдЪрд░ рдЗрддрдиреА рдЪреБрдкрдЪрд╛рдк рдХреИрд╕реЗ рд░рд┐рд▓реАрдЬ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереА?! рдореИрдВ

@adamreisnz рдпреЛрдЧреНрдп рдзрдиреНрдпрд╡рд╛рджред рдЖрдк Mongoose рдлреАрдЪрд░ рдЕрдкрдбреЗрдЯ рдХрд╣рд╛рдВ рдвреВрдВрдврддреЗ рд╣реИрдВ? рдЪреЗрдВрдЬрд▓реЙрдЧ? рдЯреНрд╡рд┐рдЯрд░?

рдЪреИрдВрдЬ рдЖрдорддреМрд░ рдкрд░, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛!

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

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

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

lukasz-zak picture lukasz-zak  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

p3x-robot picture p3x-robot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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