@mastra/mongodb 0.13.0-alpha.2 → 0.13.0-alpha.3

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @mastra/mongodb@0.13.0-alpha.2 build /home/runner/work/mastra/mastra/stores/mongodb
2
+ > @mastra/mongodb@0.13.0-alpha.3 build /home/runner/work/mastra/mastra/stores/mongodb
3
3
  > tsup --silent --config tsup.config.ts
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @mastra/mongodb
2
2
 
3
+ ## 0.13.0-alpha.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 94baf89: fixed an issue where mongodb vector adapter would not properly use metadata filters
8
+
3
9
  ## 0.13.0-alpha.2
4
10
 
5
11
  ### 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(mongoFilter).length > 0 && Object.keys(documentMongoFilter).length > 0) {
331
- combinedFilter = { $and: [mongoFilter, documentMongoFilter] };
332
- } else if (Object.keys(mongoFilter).length > 0) {
333
- combinedFilter = mongoFilter;
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;