Mongoose: рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрдЧ (рдЗрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЬреВрди 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

HI рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╕рдорд╛рдЪрд╛рд░" рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореЙрдбрд▓ рд╣реИ:

import mongoose, { Schema } from 'mongoose';
mongoose.set('debug', true);

var newsLikesSchema = new Schema({
  _news_id: { type: Schema.Types.ObjectId, ref: 'news' },
  condominiums_id: { type: Number, required: true },
  users_id: { type: Number, required: true },
  created_at: { type: Date, default: Date.now },
}, {
  emitIndexErrors: true
});

newsLikesSchema.on('error', function(errorE) {
  console.log('---> index error: ', errorE);
});

newsLikesSchema.on('index', function(errI) {
  console.log('----> new index creating', errI);
});

// Index
newsLikesSchema.index({ _news_id: 1, users_id: 1 }, {unique: true}); // unique like per news/nuser
newsLikesSchema.index({ _news_id: 1, created_at: 1 }); // to sort by news_id and date
newsLikesSchema.index({ users_id: 1 });

var newsLikesM = mongoose.model('newslikes', newsLikesSchema);

module.exports = newsLikesM;

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ ".on('error')" рдФрд░ ".on('index')" рдХреЙрд▓рдмреИрдХ рд╕реЗ рдлреАрдбрдмреИрдХ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореЛрдВрдЧреЛрдбреАрдмреА рд╕рдВрд╕реНрдХрд░рдг: 3.4.2
рдиреЗрд╡рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг: 4.10.4
NodeJS рд╕рдВрд╕реНрдХрд░рдг: v6.7.0

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

рдореИрдВ autoIndex:false рд╕реЗрдЯ рдХрд░рддрд╛

'use strict';

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var uniqueValidator = require('mongoose-unique-validator');

mongoose.set('debug', true);
mongoose.connect('mongodb://localhost:27017/gh3396',{ config: {autoIndex: false} });

// Variables
var ClientSchema = new Schema(
    {
      name : {
        type     : String,
        required : true,
        trim     : true
      },
      organization : {
        type     : String,
        required : true
      }
    }
  )

// Indexes
ClientSchema.index({ "name" : 1, "organization" : 1 }, { unique : true })

// Plugins
ClientSchema.plugin(uniqueValidator, {
  message : 'Name must be unique.'
})

const Client = mongoose.model('Client', ClientSchema);

Client.ensureIndexes()
Client.on('index', function(err){
console.log(err)
})

new Client({
  name: 'a',
  organization:'a'
}).save().then((result) => {
  console.log(result)
}, (err) => {
  console.log(err)
})

рдФрд░ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ _id рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ:

> use gh3396
switched to db gh3396
> show collections
clients
> db.clients.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "gh3396.clients"
    }
]

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдореЛрдВрдЧреЛрдбреАрдмреА рд╕рдВрд╕реНрдХрд░рдг: 3.2.1
рдиреЗрд╡рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг: 4.10.3
NodeJS рд╕рдВрд╕реНрдХрд░рдг: v6.7.0

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

рдореБрдЭреЗ рдЗрдВрдбреЗрдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рднреА рд╕рдорд╕реНрдпрд╛ рдереАред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ schema.options.autoIndex рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ред
рдореЗрд░реА рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП schema.options.autoIndex = false рдФрд░ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдПрдБ рдирд╣реАрдВ рдмрдирд╛рдИ рдЧрдИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА autoIndex рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдереАред

рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ #5324 рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ autoIndex:false рд╕реЗрдЯ рдХрд░рддрд╛

'use strict';

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var uniqueValidator = require('mongoose-unique-validator');

mongoose.set('debug', true);
mongoose.connect('mongodb://localhost:27017/gh3396',{ config: {autoIndex: false} });

// Variables
var ClientSchema = new Schema(
    {
      name : {
        type     : String,
        required : true,
        trim     : true
      },
      organization : {
        type     : String,
        required : true
      }
    }
  )

// Indexes
ClientSchema.index({ "name" : 1, "organization" : 1 }, { unique : true })

// Plugins
ClientSchema.plugin(uniqueValidator, {
  message : 'Name must be unique.'
})

const Client = mongoose.model('Client', ClientSchema);

Client.ensureIndexes()
Client.on('index', function(err){
console.log(err)
})

new Client({
  name: 'a',
  organization:'a'
}).save().then((result) => {
  console.log(result)
}, (err) => {
  console.log(err)
})

рдФрд░ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ _id рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИ:

> use gh3396
switched to db gh3396
> show collections
clients
> db.clients.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "gh3396.clients"
    }
]

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдореЛрдВрдЧреЛрдбреАрдмреА рд╕рдВрд╕реНрдХрд░рдг: 3.2.1
рдиреЗрд╡рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг: 4.10.3
NodeJS рд╕рдВрд╕реНрдХрд░рдг: v6.7.0

рд╣рд╛рдБ, рдпрд╣ #5324 рдФрд░ #5328 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИред 4.10.6 рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

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

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

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

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

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

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