1

MongoDB Atlas Cluster version: 5.0.12 MERN Stack Application

Simple Search App that returns Specific ads when keywords are typed in an input.

Front end is handled by React-Redux. And I am using Axios to request my server for data.

Server is using Mongo's aggregate pipeline function to search for text using $search, and then a few different operators to fetch data from another collection.

There are two collections, the main one has a foreign key that references the second one. Here is a sample json of both the collections

ads: {
  _id: 1,
  companyId: 1,
  primaryText: "",
  description: "",
  CTA: "Sign Up",
  imageUrl: "",
  heading: "",
}

companies: {
  _id: 1,
  name: "Levi's",
  url: "",
}

This is the search index that I have been using to look for keywords in the collection.

{
  "mappings": {
    "dynamic": true,
    "fields": {
      "company": {
        "fields": {
          "name": [
            {
              "dynamic": true,
              "type": "document"
            },
            {
              "type": "string"
            }
          ]
        },
        "type": "document"
      },
      "description": [
        {
          "dynamic": true,
          "type": "document"
        },
        {
          "type": "string"
        }
      ],
      "heading": [
        {
          "dynamic": true,
          "type": "document"
        },
        {
          "type": "string"
        }
      ],
      "primaryText": [
        {
          "dynamic": true,
          "type": "document"
        },
        {
          "type": "string"
        }
      ]
    }
  }
}

Mongo doesn't let me query $search anywhere in the pipeline except as the first operation. So the order that works is this

$seach --> $lookup --> $project --> $unwind

This works but the only problem is that when I try to search for keyword that is present in the companies collection, like name: "Levi's", it doesn't respond with the corresponding ad.

So, In short I am trying to find a way to apply $search on a collection that has the gone through a $lookup.

Thank you, and I appreciate you spending time reading this.

TZ5
  • 23
  • 5

0 Answers0