@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/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(mongoFilter).length > 0 && Object.keys(documentMongoFilter).length > 0) {
329
- combinedFilter = { $and: [mongoFilter, documentMongoFilter] };
330
- } else if (Object.keys(mongoFilter).length > 0) {
331
- combinedFilter = mongoFilter;
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;