@cocreate/mongodb 1.16.1 → 1.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/package.json +1 -1
- package/src/index.js +16 -112
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## [1.17.1](https://github.com/CoCreate-app/CoCreate-mongodb/compare/v1.17.0...v1.17.1) (2024-01-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* handle stroage if $storage string ([732a2b9](https://github.com/CoCreate-app/CoCreate-mongodb/commit/732a2b9e0ac6cb10225a202df204f046e6728733))
|
|
7
|
+
|
|
8
|
+
# [1.17.0](https://github.com/CoCreate-app/CoCreate-mongodb/compare/v1.16.1...v1.17.0) (2024-01-17)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* update to support new query system ([7555076](https://github.com/CoCreate-app/CoCreate-mongodb/commit/7555076cf718f68d56547988879e910770a45c5e))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* parseRegex expresion function to seperate pattern from options ([9401b07](https://github.com/CoCreate-app/CoCreate-mongodb/commit/9401b07b459f3a809e2ef0496a5df08adb5840b1))
|
|
19
|
+
|
|
1
20
|
## [1.16.1](https://github.com/CoCreate-app/CoCreate-mongodb/compare/v1.16.0...v1.16.1) (2024-01-08)
|
|
2
21
|
|
|
3
22
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const { MongoClient, ObjectId } = require('mongodb');
|
|
2
|
-
const { dotNotationToObject,
|
|
2
|
+
const { dotNotationToObject, query, searchData, sortData, isValidDate } = require('@cocreate/utils')
|
|
3
3
|
const clients = new Map()
|
|
4
4
|
const organizations = {}
|
|
5
5
|
|
|
@@ -294,6 +294,14 @@ function object(method, data) {
|
|
|
294
294
|
let $storage = data[type][i].$storage || []
|
|
295
295
|
let $database = data[type][i].$database || []
|
|
296
296
|
let $array = data[type][i].$array || []
|
|
297
|
+
|
|
298
|
+
if (!Array.isArray($storage))
|
|
299
|
+
$storage = [data[type][i].$storage]
|
|
300
|
+
if (!Array.isArray($database))
|
|
301
|
+
$database = [data[type][i].$database]
|
|
302
|
+
if (!Array.isArray($array))
|
|
303
|
+
$array = [data[type][i].$array]
|
|
304
|
+
|
|
297
305
|
$storage.push(data.storageName)
|
|
298
306
|
$database.push(database)
|
|
299
307
|
$array.push(array)
|
|
@@ -617,7 +625,7 @@ async function createFilter(data, arrayObj) {
|
|
|
617
625
|
|
|
618
626
|
if (data.$filter) {
|
|
619
627
|
if (data.$filter.query)
|
|
620
|
-
query =
|
|
628
|
+
query = data.$filter.query
|
|
621
629
|
|
|
622
630
|
if (data.$filter.sort) {
|
|
623
631
|
for (let i = 0; i < data.$filter.sort.length; i++) {
|
|
@@ -648,116 +656,12 @@ async function createFilter(data, arrayObj) {
|
|
|
648
656
|
return { query, sort, index, limit, count }
|
|
649
657
|
}
|
|
650
658
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
if (!item.key)
|
|
659
|
-
continue
|
|
660
|
-
|
|
661
|
-
if (item.key == "_id") {
|
|
662
|
-
if (item.value)
|
|
663
|
-
try {
|
|
664
|
-
item.value = ObjectId(item.value)
|
|
665
|
-
} catch (error) {
|
|
666
|
-
continue
|
|
667
|
-
}
|
|
668
|
-
else
|
|
669
|
-
continue
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
if (isValidDate(item.value))
|
|
673
|
-
item.value = new Date(item.value)
|
|
674
|
-
|
|
675
|
-
let key = item.key;
|
|
676
|
-
if (!query[key]) {
|
|
677
|
-
query[key] = {};
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
switch (item.operator) {
|
|
681
|
-
case '$includes':
|
|
682
|
-
case 'includes':
|
|
683
|
-
query[key]['$regex'] = item.value;
|
|
684
|
-
break;
|
|
685
|
-
|
|
686
|
-
case '$range':
|
|
687
|
-
if (item.value[0] !== null && item.value[1] !== null) {
|
|
688
|
-
query[key] = { $gte: item.value[0], $lte: item.value[1] };
|
|
689
|
-
} else if (item.value[0] !== null) {
|
|
690
|
-
query[key] = { $gte: item.value[0] };
|
|
691
|
-
} else if (item.value[1] !== null) {
|
|
692
|
-
query[key] = { $lte: item.value[1] };
|
|
693
|
-
}
|
|
694
|
-
break;
|
|
695
|
-
|
|
696
|
-
case 'equals':
|
|
697
|
-
query[$eq][item.operator] = item.value;
|
|
698
|
-
case '$eq':
|
|
699
|
-
case '$ne':
|
|
700
|
-
case '$lt':
|
|
701
|
-
case '$lte':
|
|
702
|
-
case '$gt':
|
|
703
|
-
case '$gte':
|
|
704
|
-
case '$regex':
|
|
705
|
-
query[key][item.operator] = item.value;
|
|
706
|
-
break;
|
|
707
|
-
case '$in':
|
|
708
|
-
if (!Array.isArray(item.value))
|
|
709
|
-
query[key][item.operator] = [item.value]
|
|
710
|
-
else
|
|
711
|
-
query[key] = { $in: item.value }
|
|
712
|
-
break;
|
|
713
|
-
|
|
714
|
-
case '$nin':
|
|
715
|
-
if (!Array.isArray(item.value))
|
|
716
|
-
query[key][item.operator] = [item.value]
|
|
717
|
-
else
|
|
718
|
-
query[key] = { $nin: item.value }
|
|
719
|
-
break;
|
|
720
|
-
case '$elemMatch':
|
|
721
|
-
query[key] = {
|
|
722
|
-
"$elemMatch": {
|
|
723
|
-
name: {
|
|
724
|
-
$in: item.value
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
break;
|
|
729
|
-
case '$or':
|
|
730
|
-
if (!query[item.operator])
|
|
731
|
-
query[item.operator] = [{ [key]: item.value }];
|
|
732
|
-
else
|
|
733
|
-
query[item.operator].push({ [key]: item.value })
|
|
734
|
-
delete query[key]
|
|
735
|
-
break;
|
|
736
|
-
case '$geoWithin':
|
|
737
|
-
try {
|
|
738
|
-
let value = JSON.parse(item.value);
|
|
739
|
-
if (item.type) {
|
|
740
|
-
query[key]['$geoWithin'] = {
|
|
741
|
-
[item.type]: value
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
} catch (e) {
|
|
745
|
-
console.log('geowithin error');
|
|
746
|
-
}
|
|
747
|
-
break;
|
|
748
|
-
case 'dotNotation':
|
|
749
|
-
// TODO: handle CoCreate query using dotNotation, objects and utils.dotNotionToObject to perform deep merge
|
|
750
|
-
break;
|
|
751
|
-
}
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
//. global search
|
|
755
|
-
//. we have to set indexes in text fields ex: db.chart.createIndex({ "$**": "text" })
|
|
756
|
-
// if (data['searchKey']) {
|
|
757
|
-
// query["$text"] = {$search: "\"Ni\""};
|
|
758
|
-
// }
|
|
759
|
-
|
|
760
|
-
return query;
|
|
659
|
+
function parseRegExp(regExpString) {
|
|
660
|
+
let matches = regExpString.match(/\/(.*)\/(.*)/);
|
|
661
|
+
return {
|
|
662
|
+
pattern: matches[1],
|
|
663
|
+
options: matches[2]
|
|
664
|
+
};
|
|
761
665
|
}
|
|
762
666
|
|
|
763
667
|
function createProjection(data) {
|