рдореЗрдЯрд╛рд╕реНрдЯреЛрдХрд▓ - рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдбреЗрдЯрд╛ рдЧреЛрджрд╛рдо

рдЫрд╡рд┐


рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рд╕рд░рдгрд┐рдпрд╛рдБ, рджрд┐рдирд╛рдВрдХ, рд╕рдВрдЦреНрдпрд╛, рддрд╛рд░, рд╣рд╛рдБ рдХреБрдЫ рднреАред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рджрд░рдЕрд╕рд▓, рдЕрдХреНрд╕рд░ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рддрд░рд┐рдд, рдЦреБрд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджрд╛рд╡реЛрдВ рдХреЗред


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рдореЗрдЯрд╛рд╕реНрдЯреЛрдХрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рдеред


рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдПрдХ рдмрд┐рдЯ


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


рдореЗрдЯрд╛рд╕реНрдЯреЛрдХ рдЙрди рдкрд░рддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ), рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреЙрд░рдХрд▓ рд▓реЗрдпрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ , рдЬреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


, - , . metastocle. : , ...


, , :


  • тАФ nosql , , ...
  • тАФ , .
  • () тАФ : , , ...

:


:


const Node = require('metastocle').Node;

(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost'
    });

    //  
    await node.addCollection('test', { limit:  10000, pk:  'id' });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

:


const Client = require('metastocle').Client;

(async () => {
  try {
    const client = new Client({
      address: 'localhost:4000'
    });
    await client.init();

    //  
    const doc = await client.addDocument('test', { text: 'hi' });

    //   
    await client.updateDocuments('test', { text: 'bye' }, {
      filter: { id: doc.id }
    });

    //    
    await client.addDocument('test', { id: 2, text: 'new' });

    //   
    const results = await client.getDocuments('test', {
      filter: { id: 2 }
    });

    //   
    const doc2 = await client.getDocumentById('test', 2));

    //   
    for(let i = 10; i <= 20; i++) {
      await client.addDocument('test', { id: i, x: i });
    }

    //  ,   
    const results2 = await client.getDocuments('test', {
      filter: { id: { $gt: 15 } },
      sort: [['x', 'desc']],
      limit:  2,
      offset:  1,
      fields: ['id']
    });

    //  ,   id > 15
    await client.deleteDocuments('test', {
      filter: { id: { $gt: 15 } }
    });
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

, , . , :


const node = new Node({
   port: 4000,
   hostname: 'localhost',
   collections: {
     test: { limit: 10000, pk: 'id' }
   }
 });

:


  • pk тАФ . , . , , , uuid , .
  • limit тАФ
  • queue тАФ : ,   ,
  • limitationOrder тАФ , . , , .
  • schema тАФ
  • defaults тАФ . 
  • hooks тАФ . 
  • preferredDuplicates тАФ .

(schema) :


{ 
  type: 'object',
  props: {
    count: 'number',
    title: 'string',
    description: { type: 'string' },
    priority: {
      type: 'number',
      value: val => val >= -1 && val <= 1
    },
    goods: {
      type: 'array',
      items: {
        type: 'object',
        props: {
          title: 'string',
          isAble: 'boolean'
        }
      }
    }
  }
}

utils.validateSchema() https://github.com/ortexx/spreadable/blob/master/src/utils.js


:


{ 
  defaults: {
    date: Date.now
    priority: 0
    'nested.prop': (key, doc) => Date.now() - doc.date
  },
  hooks: {
    priority: (val, key, doc, prevDoc) => prevDoc? prevDoc.priority + 1: val
  }
}

:


  • CRUD
  • Javascript, , .


javascript , . 


https://github.com/ortexx/metastocle/blob/master/dist/metastocle.client.js window.ClientMetastocle ...


Api


  • async Client.prototype.addDocument() тАФ
  • async Client.prototype.getDocuments() тАФ -
  • async Client.prototype.getDocumentsount() тАФ
  • async Client.prototype.getDocumentByPk() тАФ
  • async Client.prototype.updateDocuments() тАФ -
  • async Client.prototype.deleteDocuments() тАФ -

():


.filter тАФ , :


{ 
  a: { $lt: 1 },
  $and: [
    { x: 1 },
    { y: { $gt: 2 } },
    { 
      $or: [
        { z: 1 },
        { "b.c": 2 }
      ] 
    }
  ]
}

.sort тАФ , :


{ sort: [['x', 'asc'], ['y.z', 'desc']] }

.limit тАФ


.offset тАФ


.fields тАФ


readme.



. : npm i -g metastocle --unsafe-perm=true --allow-root. , .


, metastocle -a getDocumentByPk -o test -p 1 -c ./config.js, 1 test. https://github.com/ortexx/metastocle/blob/master/bin/actions.js



  • , , , . , -, , -, , .
  • . , - , : , ... , , http , .

, .


, , :


  • , , , - , . 
  • - , , , . , 10000 - 100 , , , .

, , , , . , , .


:



All Articles