@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/dist/index.js
CHANGED
|
@@ -324,11 +324,12 @@ var MongoDBVector = class extends MastraVector {
|
|
|
324
324
|
const indexNameInternal = `${indexName}_vector_index`;
|
|
325
325
|
const mongoFilter = this.transformFilter(filter);
|
|
326
326
|
const documentMongoFilter = documentFilter ? { [this.documentFieldName]: documentFilter } : {};
|
|
327
|
+
const transformedMongoFilter = this.transformMetadataFilter(mongoFilter);
|
|
327
328
|
let combinedFilter = {};
|
|
328
|
-
if (Object.keys(
|
|
329
|
-
combinedFilter = { $and: [
|
|
330
|
-
} else if (Object.keys(
|
|
331
|
-
combinedFilter =
|
|
329
|
+
if (Object.keys(transformedMongoFilter).length > 0 && Object.keys(documentMongoFilter).length > 0) {
|
|
330
|
+
combinedFilter = { $and: [transformedMongoFilter, documentMongoFilter] };
|
|
331
|
+
} else if (Object.keys(transformedMongoFilter).length > 0) {
|
|
332
|
+
combinedFilter = transformedMongoFilter;
|
|
332
333
|
} else if (Object.keys(documentMongoFilter).length > 0) {
|
|
333
334
|
combinedFilter = documentMongoFilter;
|
|
334
335
|
}
|
|
@@ -343,6 +344,8 @@ var MongoDBVector = class extends MastraVector {
|
|
|
343
344
|
const candidateIds = await collection.aggregate([{ $match: combinedFilter }, { $project: { _id: 1 } }]).map((doc) => doc._id).toArray();
|
|
344
345
|
if (candidateIds.length > 0) {
|
|
345
346
|
vectorSearch.filter = { _id: { $in: candidateIds } };
|
|
347
|
+
} else {
|
|
348
|
+
return [];
|
|
346
349
|
}
|
|
347
350
|
}
|
|
348
351
|
const pipeline = [
|
|
@@ -565,6 +568,45 @@ var MongoDBVector = class extends MastraVector {
|
|
|
565
568
|
if (!filter) return {};
|
|
566
569
|
return translator.translate(filter);
|
|
567
570
|
}
|
|
571
|
+
/**
|
|
572
|
+
* Transform metadata field filters to use MongoDB dot notation.
|
|
573
|
+
* Fields that are stored in the metadata subdocument need to be prefixed with 'metadata.'
|
|
574
|
+
* This handles filters from the Memory system which expects direct field access.
|
|
575
|
+
*
|
|
576
|
+
* @param filter - The filter object to transform
|
|
577
|
+
* @returns Transformed filter with metadata fields properly prefixed
|
|
578
|
+
*/
|
|
579
|
+
transformMetadataFilter(filter) {
|
|
580
|
+
if (!filter || typeof filter !== "object") return filter;
|
|
581
|
+
const transformed = {};
|
|
582
|
+
for (const [key, value] of Object.entries(filter)) {
|
|
583
|
+
if (key.startsWith("$")) {
|
|
584
|
+
if (Array.isArray(value)) {
|
|
585
|
+
transformed[key] = value.map((item) => this.transformMetadataFilter(item));
|
|
586
|
+
} else {
|
|
587
|
+
transformed[key] = this.transformMetadataFilter(value);
|
|
588
|
+
}
|
|
589
|
+
} else if (key.startsWith("metadata.")) {
|
|
590
|
+
transformed[key] = value;
|
|
591
|
+
} else if (this.isMetadataField(key)) {
|
|
592
|
+
transformed[`metadata.${key}`] = value;
|
|
593
|
+
} else {
|
|
594
|
+
transformed[key] = value;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
return transformed;
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Determine if a field should be treated as a metadata field.
|
|
601
|
+
* Common metadata fields include thread_id, resource_id, message_id, and any field
|
|
602
|
+
* that doesn't start with underscore (MongoDB system fields).
|
|
603
|
+
*/
|
|
604
|
+
isMetadataField(key) {
|
|
605
|
+
if (key.startsWith("_")) return false;
|
|
606
|
+
const documentFields = ["_id", this.embeddingFieldName, this.documentFieldName];
|
|
607
|
+
if (documentFields.includes(key)) return false;
|
|
608
|
+
return true;
|
|
609
|
+
}
|
|
568
610
|
};
|
|
569
611
|
var MongoDBConnector = class _MongoDBConnector {
|
|
570
612
|
#client;
|