Skip to content

Commit c1cad8c

Browse files
committed
New Version 1.6.0
1 parent 471aa78 commit c1cad8c

9 files changed

Lines changed: 90 additions & 21 deletions

File tree

README.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,8 @@
1717
</p>
1818
</div>
1919

20-
## New version 1.5.0!
21-
- **findAndUpdate** function added!
22-
- **findAndDelete** function added!
23-
- **findOneAndUpdate** function added!
24-
- **findOneAndDelete** function added!
25-
- Added language support for bugs in find functions.
20+
## New version 1.6.0!
21+
- **findOne** function added!
2622

2723
## About
2824
- **Designed for Beginners:** The mzrdb module simplifies working with databases for new programmers. It provides an intuitive key-value interface, making data storage and retrieval a breeze.
@@ -103,9 +99,10 @@ await db.delByPriority('key', 1) // [ { mzr2: "value2" } ]
10399
await db.setByPriority('key', { new2: 'This Edited!' }, 1) // [ { new2: "This Edited!" } ]
104100

105101
await db.find('key', { mzr: 'value' }) // [ { mzr: "value" } ]
102+
await db.findOne('key', { mzr: 'value' }) // { mzr: "value" }
106103

107104
await db.findAndUpdate('key', { mzr: 'value' }, { mzr: 'value2' }) // [ { old: { mzr: "value" }, new: { mzr: "value2" } } ]
108-
await db.findAndDelete('key', { mzr: 'value' }) // [ { mzr: 'value' } ]
105+
await db.findAndDelete('key', { mzr: 'value' }) // [ { mzr: "value" } ]
109106

110107
await db.findOneAndUpdate('key', { mzr: 'value' }) // { old: { mzr: "value" }, new: { mzr: "value2" } }
111108
await db.findOneAndDelete('key', { mzr: 'value' }) // { mzr: "value" }
@@ -136,7 +133,7 @@ await db.length() // 20 (Character count)
136133

137134
db.ping // { read: "1ms", write: "2ms", average: "1.5ms" }
138135
db.size // 11 Bytes (Database size)
139-
db.version // 1.5.0 (Module version)
136+
db.version // 1.6.0 (Module version)
140137
```
141138

142139
## All Local Adapter Methods
@@ -181,9 +178,10 @@ db.delByPriority('key', 1) // [ { mzr2: "value2" } ]
181178
db.setByPriority('key', { new2: 'This Edited!' }, 1) // [ { new2: "This Edited!" } ]
182179

183180
db.find('key', { mzr: 'value' }) // [ { mzr: "value" } ]
181+
db.findOne('key', { mzr: 'value' }) // { mzr: "value" }
184182

185183
db.findAndUpdate('key', { mzr: 'value' }, { mzr: 'value2' }) // [ { old: { mzr: "value" }, new: { mzr: "value2" } } ]
186-
db.findAndDelete('key', { mzr: 'value' }) // [ { mzr: 'value' } ]
184+
db.findAndDelete('key', { mzr: 'value' }) // [ { mzr: "value" } ]
187185

188186
db.findOneAndUpdate('key', { mzr: 'value' }) // { old: { mzr: "value" }, new: { mzr: "value2" } }
189187
db.findOneAndDelete('key', { mzr: 'value' }) // { mzr: "value" }
@@ -211,7 +209,7 @@ db.length() // 20 (Character count)
211209

212210
db.ping // { read: "1ms", write: "2ms", average: "1.5ms" }
213211
db.size // 11 Bytes (Database size)
214-
db.version // 1.5.0 (Module version)
212+
db.version // 1.6.0 (Module version)
215213
```
216214

217215
## Contact & Support

adapters/bsondb.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,21 @@ class BsonDB {
528528
throw new Error(this.message['errors']['noDocMatchedQuery']);
529529
};
530530
}
531+
532+
findOne(key, query) {
533+
if (typeof key !== 'string' || key.trim() === '') {
534+
throw new TypeError(this.message['errors']['nonEmptyString']);
535+
};
536+
537+
if (typeof query !== 'object' || query === null) {
538+
throw new TypeError(this.message['errors']['queryMustObjects']);
539+
};
540+
541+
const data = this.get(key) || [];
542+
if (!Array.isArray(data)) throw new Error(this.message['errors']['dataMustArray']);
543+
544+
return data.find(doc => Object.keys(query).every(queryKey => queryKey in doc && doc[queryKey] === query[queryKey])) || null;
545+
}
531546
}
532547

533548
module.exports = BsonDB;

adapters/jsondb.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,21 @@ class JsonDB {
555555
throw new Error(this.message['errors']['noDocMatchedQuery']);
556556
};
557557
}
558+
559+
findOne(key, query) {
560+
if (typeof key !== 'string' || key.trim() === '') {
561+
throw new TypeError(this.message['errors']['nonEmptyString']);
562+
};
563+
564+
if (typeof query !== 'object' || query === null) {
565+
throw new TypeError(this.message['errors']['queryMustObjects']);
566+
};
567+
568+
const data = this.get(key) || [];
569+
if (!Array.isArray(data)) throw new Error(this.message['errors']['dataMustArray']);
570+
571+
return data.find(doc => Object.keys(query).every(queryKey => queryKey in doc && doc[queryKey] === query[queryKey])) || null;
572+
}
558573
}
559574

560575
module.exports = JsonDB;

adapters/mongodb/index.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,21 @@ class MongoDB extends Base {
515515
throw new Error(this.message['errors']['noDocMatchedQuery']);
516516
};
517517
}
518+
519+
async findOne(key, query) {
520+
if (typeof key !== 'string' || key.trim() === '') {
521+
throw new TypeError(this.message['errors']['nonEmptyString']);
522+
};
523+
524+
if (typeof query !== 'object' || query === null) {
525+
throw new TypeError(this.message['errors']['queryMustObjects']);
526+
};
527+
528+
const data = await this.get(key) || [];
529+
if (!Array.isArray(data)) throw new Error(this.message['errors']['dataMustArray']);
530+
531+
return data.find(doc => Object.keys(query).every(queryKey => queryKey in doc && doc[queryKey] === query[queryKey])) || null;
532+
}
518533
}
519534

520535
async function convertData(data) {

adapters/yamldb.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,21 @@ class YamlDB {
563563
throw new Error(this.message['errors']['noDocMatchedQuery']);
564564
};
565565
}
566+
567+
findOne(key, query) {
568+
if (typeof key !== 'string' || key.trim() === '') {
569+
throw new TypeError(this.message['errors']['nonEmptyString']);
570+
};
571+
572+
if (typeof query !== 'object' || query === null) {
573+
throw new TypeError(this.message['errors']['queryMustObjects']);
574+
};
575+
576+
const data = this.get(key) || [];
577+
if (!Array.isArray(data)) throw new Error(this.message['errors']['dataMustArray']);
578+
579+
return data.find(doc => Object.keys(query).every(queryKey => queryKey in doc && doc[queryKey] === query[queryKey])) || null;
580+
}
566581
}
567582

568583
module.exports = YamlDB;

file/index.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,5 +473,11 @@ module.exports = {
473473
this.setOptions();
474474

475475
return this.adapter.findOneAndDelete(key, query);
476-
}
476+
},
477+
478+
findOne(key, query) {
479+
this.setOptions();
480+
481+
return this.adapter.findOne(key, query);
482+
},
477483
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@
3737
"type": "git",
3838
"url": "git+https://github.com/mzrcode/mzrdb.git"
3939
},
40-
"version": "1.5.0"
40+
"version": "1.6.0"
4141
}

test.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
11
// const db = require('./file/index');
22
// db.setAdapter('bsondb');
33

4-
/*
5-
db.push('test', { name: 'kaan', age: 20 });
6-
db.push('test', { name: 'emre', age: 19 });
7-
db.push('test', { name: 'emirhan', age: 18 });
8-
db.push('test', { name: 'burak', age: 17 });
9-
// */
10-
114
/*
125
db.setAdapter('mongodb', {
136
url: 'SECRET :)'
147
});
158
169
(async () => {
1710
// const a = await db.findAndUpdate('test', { name: 'kaan' }, { age: 21 });
18-
// const a = await db.findAndDelete('test', { name: 'burak' });
11+
// const a = await db.findAndDelete('test', { name: 'emre' });
1912
2013
// const a = await db.findOneAndUpdate('test', { name: 'kaan' }, { age: 20 });
2114
// const a = await db.findOneAndDelete('test', { name: 'emirhan' });
@@ -25,7 +18,7 @@ db.setAdapter('mongodb', {
2518
})(); // */
2619

2720
// const a = db.findAndUpdate('test', { name: 'kaan' }, { age: 21 });
28-
// const a = db.findAndDelete('test', { name: 'burak' });
21+
// const a = db.findAndDelete('test', { name: 'emre' });
2922

3023
// const a = db.findOneAndUpdate('test', { name: 'kaan' }, { age: 21 });
3124
// const a = db.findOneAndDelete('test', { name: 'emirhan' });

typings/index.d.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,5 +440,17 @@ export function findOneAndUpdate(key: string, query: object, update: object): {
440440
*/
441441
export function findOneAndDelete(key: string, query: object): object;
442442

443+
/**
444+
* Finds the first document that matches the query from the specified key.
445+
* @param {string} key - The key for the collection.
446+
* @param {Object} query - The query object to match documents.
447+
* @returns {Object | null} The first document that matches the query, or null if no document matches.
448+
* @throws {TypeError} If the key is not a non-empty string or if the query is not an object.
449+
* @throws {Error} If the data retrieved from the key is not an array.
450+
* @example db.findOne('users', { name: 'Kaan' });
451+
*/
452+
export function findOne(key: string, query: Record<string, any>): Record<string, any> | null;
453+
454+
443455
export { del as delete };
444456
export { exports as export };

0 commit comments

Comments
 (0)