
рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рд╕рд░рдгрд┐рдпрд╛рдБ, рджрд┐рдирд╛рдВрдХ, рд╕рдВрдЦреНрдпрд╛, рддрд╛рд░, рд╣рд╛рдБ рдХреБрдЫ рднреАред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рджрд░рдЕрд╕рд▓, рдЕрдХреНрд╕рд░ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рддрд░рд┐рдд, рдЦреБрд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджрд╛рд╡реЛрдВ рдХреЗред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рдореЗрдЯрд╛рд╕реНрдЯреЛрдХрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ , рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рдеред
рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдПрдХ рдмрд┐рдЯ
рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдПрдХ рд╕рдВрдЧреАрдд рднрдВрдбрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдпрд╣ рд▓реЗрдЦ рд╡рд┐рд╡рд░рдгред рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдк рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХреЗрдВ: рдХрд┐рддрд╛рдмреЗрдВ, рд╡реАрдбрд┐рдпреЛ рдЖрджрд┐ред рдпрд╣ рд╕рдм рдХреБрдЫ рдкрд░рддреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрдЯрд╛рд╕реНрдЯреЛрдХ рдЙрди рдкрд░рддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ), рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдЯреЙрд░рдХрд▓ рд▓реЗрдпрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ , рдЬреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
, - , . 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']
});
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
}
}
:
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 , , , .
, , , , . , , .
: