@cocreate/mongodb 1.16.0 → 1.17.0
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 +21 -117
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# [1.17.0](https://github.com/CoCreate-app/CoCreate-mongodb/compare/v1.16.1...v1.17.0) (2024-01-17)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* update to support new query system ([7555076](https://github.com/CoCreate-app/CoCreate-mongodb/commit/7555076cf718f68d56547988879e910770a45c5e))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* parseRegex expresion function to seperate pattern from options ([9401b07](https://github.com/CoCreate-app/CoCreate-mongodb/commit/9401b07b459f3a809e2ef0496a5df08adb5840b1))
|
|
12
|
+
|
|
13
|
+
## [1.16.1](https://github.com/CoCreate-app/CoCreate-mongodb/compare/v1.16.0...v1.16.1) (2024-01-08)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* handling of array item update ([a189784](https://github.com/CoCreate-app/CoCreate-mongodb/commit/a1897845606460defe3d3d628e73b18d3abf6f32))
|
|
19
|
+
|
|
1
20
|
# [1.16.0](https://github.com/CoCreate-app/CoCreate-mongodb/compare/v1.15.0...v1.16.0) (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
|
|
|
@@ -581,12 +581,20 @@ function createUpdate(update, options, data, isGlobal) {
|
|
|
581
581
|
} else if (operator === '$push' || operator === '$each' || typeof index === 'number') {
|
|
582
582
|
updates[key] = data[originalKey]
|
|
583
583
|
if (typeof index === 'number' && index >= 0) {
|
|
584
|
-
if (operator
|
|
585
|
-
|
|
584
|
+
if (!operator)
|
|
585
|
+
operator = "$set"
|
|
586
|
+
else {
|
|
587
|
+
if (operator === '$push')
|
|
588
|
+
updates[key] = [data[originalKey]]
|
|
586
589
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
+
|
|
591
|
+
let insert = { $each: updates[key] }
|
|
592
|
+
insert.$postion = index
|
|
593
|
+
if (index >= 0)
|
|
594
|
+
updates[arrayKey] = insert
|
|
595
|
+
else
|
|
596
|
+
updates[key] = insert
|
|
597
|
+
}
|
|
590
598
|
}
|
|
591
599
|
} else if (operator === '$inc') {
|
|
592
600
|
updates[key] = data[originalKey]
|
|
@@ -609,7 +617,7 @@ async function createFilter(data, arrayObj) {
|
|
|
609
617
|
|
|
610
618
|
if (data.$filter) {
|
|
611
619
|
if (data.$filter.query)
|
|
612
|
-
query =
|
|
620
|
+
query = data.$filter.query
|
|
613
621
|
|
|
614
622
|
if (data.$filter.sort) {
|
|
615
623
|
for (let i = 0; i < data.$filter.sort.length; i++) {
|
|
@@ -640,116 +648,12 @@ async function createFilter(data, arrayObj) {
|
|
|
640
648
|
return { query, sort, index, limit, count }
|
|
641
649
|
}
|
|
642
650
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
if (!item.key)
|
|
651
|
-
continue
|
|
652
|
-
|
|
653
|
-
if (item.key == "_id") {
|
|
654
|
-
if (item.value)
|
|
655
|
-
try {
|
|
656
|
-
item.value = ObjectId(item.value)
|
|
657
|
-
} catch (error) {
|
|
658
|
-
continue
|
|
659
|
-
}
|
|
660
|
-
else
|
|
661
|
-
continue
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
if (isValidDate(item.value))
|
|
665
|
-
item.value = new Date(item.value)
|
|
666
|
-
|
|
667
|
-
let key = item.key;
|
|
668
|
-
if (!query[key]) {
|
|
669
|
-
query[key] = {};
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
switch (item.operator) {
|
|
673
|
-
case '$includes':
|
|
674
|
-
case 'includes':
|
|
675
|
-
query[key]['$regex'] = item.value;
|
|
676
|
-
break;
|
|
677
|
-
|
|
678
|
-
case '$range':
|
|
679
|
-
if (item.value[0] !== null && item.value[1] !== null) {
|
|
680
|
-
query[key] = { $gte: item.value[0], $lte: item.value[1] };
|
|
681
|
-
} else if (item.value[0] !== null) {
|
|
682
|
-
query[key] = { $gte: item.value[0] };
|
|
683
|
-
} else if (item.value[1] !== null) {
|
|
684
|
-
query[key] = { $lte: item.value[1] };
|
|
685
|
-
}
|
|
686
|
-
break;
|
|
687
|
-
|
|
688
|
-
case 'equals':
|
|
689
|
-
query[$eq][item.operator] = item.value;
|
|
690
|
-
case '$eq':
|
|
691
|
-
case '$ne':
|
|
692
|
-
case '$lt':
|
|
693
|
-
case '$lte':
|
|
694
|
-
case '$gt':
|
|
695
|
-
case '$gte':
|
|
696
|
-
case '$regex':
|
|
697
|
-
query[key][item.operator] = item.value;
|
|
698
|
-
break;
|
|
699
|
-
case '$in':
|
|
700
|
-
if (!Array.isArray(item.value))
|
|
701
|
-
query[key][item.operator] = [item.value]
|
|
702
|
-
else
|
|
703
|
-
query[key] = { $in: item.value }
|
|
704
|
-
break;
|
|
705
|
-
|
|
706
|
-
case '$nin':
|
|
707
|
-
if (!Array.isArray(item.value))
|
|
708
|
-
query[key][item.operator] = [item.value]
|
|
709
|
-
else
|
|
710
|
-
query[key] = { $nin: item.value }
|
|
711
|
-
break;
|
|
712
|
-
case '$elemMatch':
|
|
713
|
-
query[key] = {
|
|
714
|
-
"$elemMatch": {
|
|
715
|
-
name: {
|
|
716
|
-
$in: item.value
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
break;
|
|
721
|
-
case '$or':
|
|
722
|
-
if (!query[item.operator])
|
|
723
|
-
query[item.operator] = [{ [key]: item.value }];
|
|
724
|
-
else
|
|
725
|
-
query[item.operator].push({ [key]: item.value })
|
|
726
|
-
delete query[key]
|
|
727
|
-
break;
|
|
728
|
-
case '$geoWithin':
|
|
729
|
-
try {
|
|
730
|
-
let value = JSON.parse(item.value);
|
|
731
|
-
if (item.type) {
|
|
732
|
-
query[key]['$geoWithin'] = {
|
|
733
|
-
[item.type]: value
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
} catch (e) {
|
|
737
|
-
console.log('geowithin error');
|
|
738
|
-
}
|
|
739
|
-
break;
|
|
740
|
-
case 'dotNotation':
|
|
741
|
-
// TODO: handle CoCreate query using dotNotation, objects and utils.dotNotionToObject to perform deep merge
|
|
742
|
-
break;
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
//. global search
|
|
747
|
-
//. we have to set indexes in text fields ex: db.chart.createIndex({ "$**": "text" })
|
|
748
|
-
// if (data['searchKey']) {
|
|
749
|
-
// query["$text"] = {$search: "\"Ni\""};
|
|
750
|
-
// }
|
|
751
|
-
|
|
752
|
-
return query;
|
|
651
|
+
function parseRegExp(regExpString) {
|
|
652
|
+
let matches = regExpString.match(/\/(.*)\/(.*)/);
|
|
653
|
+
return {
|
|
654
|
+
pattern: matches[1],
|
|
655
|
+
options: matches[2]
|
|
656
|
+
};
|
|
753
657
|
}
|
|
754
658
|
|
|
755
659
|
function createProjection(data) {
|