I want to do a text search in MongoDB. In development I use a local mongodb, and in production I use MongoDB Atlas. I want to do a $search
Atlas Search if the db I am connected to is MongoDB Atlas. If I'm connected to a local db I want to use $text
.
What I've considered
Check the connection uri
If it ends with .mongodb.net
, use Atlas Search. If not, use normal text search.
Try using $search, then if error use $text
In production it won't be slow because first it will attempt $search
and it will work in production. In development it might be slow because of making an extra failing query every time.
Also
Is there a way of mimicking the Atlas search behavior for a local MongoDB? It's okay if it involves a really slow query but it would be nice to test with same quality text matching as there will be in production.
CodePudding user response:
I would say both of your suggestions are considered anti patterns and I would personally avoid both.
What I would personally do is very similar to your first suggestion but instead of checking the value of the connection string I would just use the process.env.NODE_ENV
value, this is considered common practice to use this to separate between your dev staging and prod enviorments.
Is there a way of mimicking the Atlas search behavior for a local MongoDB? It's okay if it involves a really slow query but it would be nice to test with same quality text matching as there will be in production.
Technically no, as you know atlas search gives you many search engine abilities such as tokenizers and analyzers out of the box. If you have a very specific use case maybe you could engineer a solution to make it work, but that will require you to basically reverse engineer the functionality you're using through atlas which means it's probably not worth the effort.