@mastra/mongodb 0.13.0-alpha.2 → 0.13.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +34 -0
- package/dist/index.cjs +46 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/vector/index.d.ts +15 -0
- package/dist/vector/index.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/vector/index.test.ts +134 -0
- package/src/vector/index.ts +69 -4
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# @mastra/mongodb
|
|
2
2
|
|
|
3
|
+
## 0.13.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- ea0c5f2: Add store support to new score api
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 494ceac: fix: trace mongo safeparse
|
|
12
|
+
- 2871020: update safelyParseJSON to check for value of param when handling parse
|
|
13
|
+
- 4a406ec: fixes TypeScript declaration file imports to ensure proper ESM compatibility
|
|
14
|
+
- 94baf89: fixed an issue where mongodb vector adapter would not properly use metadata filters
|
|
15
|
+
- Updated dependencies [cb36de0]
|
|
16
|
+
- Updated dependencies [d0496e6]
|
|
17
|
+
- Updated dependencies [a82b851]
|
|
18
|
+
- Updated dependencies [ea0c5f2]
|
|
19
|
+
- Updated dependencies [41a0a0e]
|
|
20
|
+
- Updated dependencies [2871020]
|
|
21
|
+
- Updated dependencies [94f4812]
|
|
22
|
+
- Updated dependencies [e202b82]
|
|
23
|
+
- Updated dependencies [e00f6a0]
|
|
24
|
+
- Updated dependencies [4a406ec]
|
|
25
|
+
- Updated dependencies [b0e43c1]
|
|
26
|
+
- Updated dependencies [5d377e5]
|
|
27
|
+
- Updated dependencies [1fb812e]
|
|
28
|
+
- Updated dependencies [35c5798]
|
|
29
|
+
- @mastra/core@0.13.0
|
|
30
|
+
|
|
31
|
+
## 0.13.0-alpha.3
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 94baf89: fixed an issue where mongodb vector adapter would not properly use metadata filters
|
|
36
|
+
|
|
3
37
|
## 0.13.0-alpha.2
|
|
4
38
|
|
|
5
39
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -326,11 +326,12 @@ var MongoDBVector = class extends vector.MastraVector {
|
|
|
326
326
|
const indexNameInternal = `${indexName}_vector_index`;
|
|
327
327
|
const mongoFilter = this.transformFilter(filter);
|
|
328
328
|
const documentMongoFilter = documentFilter ? { [this.documentFieldName]: documentFilter } : {};
|
|
329
|
+
const transformedMongoFilter = this.transformMetadataFilter(mongoFilter);
|
|
329
330
|
let combinedFilter = {};
|
|
330
|
-
if (Object.keys(
|
|
331
|
-
combinedFilter = { $and: [
|
|
332
|
-
} else if (Object.keys(
|
|
333
|
-
combinedFilter =
|
|
331
|
+
if (Object.keys(transformedMongoFilter).length > 0 && Object.keys(documentMongoFilter).length > 0) {
|
|
332
|
+
combinedFilter = { $and: [transformedMongoFilter, documentMongoFilter] };
|
|
333
|
+
} else if (Object.keys(transformedMongoFilter).length > 0) {
|
|
334
|
+
combinedFilter = transformedMongoFilter;
|
|
334
335
|
} else if (Object.keys(documentMongoFilter).length > 0) {
|
|
335
336
|
combinedFilter = documentMongoFilter;
|
|
336
337
|
}
|
|
@@ -345,6 +346,8 @@ var MongoDBVector = class extends vector.MastraVector {
|
|
|
345
346
|
const candidateIds = await collection.aggregate([{ $match: combinedFilter }, { $project: { _id: 1 } }]).map((doc) => doc._id).toArray();
|
|
346
347
|
if (candidateIds.length > 0) {
|
|
347
348
|
vectorSearch.filter = { _id: { $in: candidateIds } };
|
|
349
|
+
} else {
|
|
350
|
+
return [];
|
|
348
351
|
}
|
|
349
352
|
}
|
|
350
353
|
const pipeline = [
|
|
@@ -567,6 +570,45 @@ var MongoDBVector = class extends vector.MastraVector {
|
|
|
567
570
|
if (!filter) return {};
|
|
568
571
|
return translator.translate(filter);
|
|
569
572
|
}
|
|
573
|
+
/**
|
|
574
|
+
* Transform metadata field filters to use MongoDB dot notation.
|
|
575
|
+
* Fields that are stored in the metadata subdocument need to be prefixed with 'metadata.'
|
|
576
|
+
* This handles filters from the Memory system which expects direct field access.
|
|
577
|
+
*
|
|
578
|
+
* @param filter - The filter object to transform
|
|
579
|
+
* @returns Transformed filter with metadata fields properly prefixed
|
|
580
|
+
*/
|
|
581
|
+
transformMetadataFilter(filter) {
|
|
582
|
+
if (!filter || typeof filter !== "object") return filter;
|
|
583
|
+
const transformed = {};
|
|
584
|
+
for (const [key, value] of Object.entries(filter)) {
|
|
585
|
+
if (key.startsWith("$")) {
|
|
586
|
+
if (Array.isArray(value)) {
|
|
587
|
+
transformed[key] = value.map((item) => this.transformMetadataFilter(item));
|
|
588
|
+
} else {
|
|
589
|
+
transformed[key] = this.transformMetadataFilter(value);
|
|
590
|
+
}
|
|
591
|
+
} else if (key.startsWith("metadata.")) {
|
|
592
|
+
transformed[key] = value;
|
|
593
|
+
} else if (this.isMetadataField(key)) {
|
|
594
|
+
transformed[`metadata.${key}`] = value;
|
|
595
|
+
} else {
|
|
596
|
+
transformed[key] = value;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
return transformed;
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Determine if a field should be treated as a metadata field.
|
|
603
|
+
* Common metadata fields include thread_id, resource_id, message_id, and any field
|
|
604
|
+
* that doesn't start with underscore (MongoDB system fields).
|
|
605
|
+
*/
|
|
606
|
+
isMetadataField(key) {
|
|
607
|
+
if (key.startsWith("_")) return false;
|
|
608
|
+
const documentFields = ["_id", this.embeddingFieldName, this.documentFieldName];
|
|
609
|
+
if (documentFields.includes(key)) return false;
|
|
610
|
+
return true;
|
|
611
|
+
}
|
|
570
612
|
};
|
|
571
613
|
var MongoDBConnector = class _MongoDBConnector {
|
|
572
614
|
#client;
|