@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.
Files changed (3) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/package.json +1 -1
  3. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/mongodb",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "A simple mongodb component in vanilla javascript. Easily configured using HTML5 data-attributes and/or JavaScript API.",
5
5
  "keywords": [
6
6
  "mongodb",
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const { MongoClient, ObjectId } = require('mongodb');
2
- const { dotNotationToObject, queryData, searchData, sortData, isValidDate } = require('@cocreate/utils')
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 === '$push')
585
- updates[key] = [data[originalKey]]
584
+ if (!operator)
585
+ operator = "$set"
586
+ else {
587
+ if (operator === '$push')
588
+ updates[key] = [data[originalKey]]
586
589
 
587
- let insert = { $each: updates[key] }
588
- insert.$postion = index
589
- updates[key] = insert
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 = createQuery(data.$filter.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
- // TODO: improve mongodb query to cover many cases
645
- function createQuery(queries) {
646
- let query = new Object();
647
-
648
- for (let item of queries) {
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) {