How to Find a Substring in a Field in Mongodb

How can I find all the objects in a database with where a field of a object contains a substring?

If the field is A in an object of a collection with a string value:

I want to find all the objects in the db "database" where A contains a substring say "abc def".

I tried:

db.database.find({A: {$regex: '/^*(abc def)*$/''}})

but didn't work

UPDATE

A real string (in unicode):

Sujet  Commentaire sur  Star Wars  Episode III - La Revanche des Sith 1

Need to search for all entries with Star Wars

db.test.find({A: {$regex: '^*(star wars)*$''}}) not wokring
1

6 Answers

Instead of this:

db.database.find({A: {$regex: '/^*(abc def)*$/''}})

You should do this:

db.database.find({A: /abc def/i })

^* is not actually valid syntax as ^ and $ are anchors and not something that is repeatable. You probably meant ^.* here. But there is no need for ^.* as that simply means "Everything up to the character following" and (abc def)* means "0 or more times "abc def", but it has to be at the end of the string, because of your $. The "i" at the end is to make it case insensitive.

8

Just use the string "Star Wars" and $regex will do the rest

db.test.find({A: {$regex: 'Star Wars'}})
2

$regex is too expensive/slow on large collections.

I'd suggest to leverage aggregation framework and $indexOfCP.

db.test.aggregate([{$match: 
    {$expr: { $gt: [{ $indexOfCP: [ "$A", "Star Wars" ] }, -1]}}
    }, {$project: {A:1}}])

For case-insensitive search you may add $toUpper to the mix and search for STAR WARS.

This worked for me:

db.test.find({"A": {'$regex': '.*star wars.*'}})
// executes, name LIKE john and only selecting the "name" and "friends" fields
db.collection.find({ name: /john/i }, 'name friends').exec();

// passing options
db.collection.find({ name: /john/i }, null, { skip: 10 }).exec();

this one uses the aggregation syntax:

db.movies.aggregate([
  {$match: 
    {
      title: {$regex: 'Star'}
    } 
  }
] )

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest