Hoe een substring in een veld in MongoDB te vinden

Hoe kan ik alle objecten in een database vinden waarmee een veld van een object een substring bevat?

Als het veld A in een object van een verzameling is met een stringwaarde:

Ik wil alle objecten vinden in de DB “-database” waar A een substring bevat: “ABC DEF”.

Ik heb geprobeerd:

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

maar werkte niet

update

Een echte string (in Unicode):

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

Nood naar alle vermeldingen met Star Wars

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

Antwoord 1, Autoriteit 100%

In plaats daarvan hiervan:

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

U moet dit doen:

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

^ * is eigenlijk geen geldige syntaxis als ^ en $ ankers en niet iets dat herhaalbaar is. Je bedoelde waarschijnlijk ^. * Hier. Maar er is geen behoefte aan ^. * Omdat dat eenvoudig betekent “alles tot het personage volgende” en (abc def) * betekent “0 of meer keren” ABC DEF “, maar het moet aan het einde van de touw zijn, Vanwege je $. De “I” aan het einde is om het ongevoelig te maken.


Antwoord 2, Autoriteit 61%

Gebruik gewoon de string “Star Wars” en $regexdoet de rest

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

Antwoord 3, Autoriteit 10%

$regexis te duur / traag op grote collecties.

Ik zou willen voorstellen om aggregatiekader en $ indexofcp te doen .

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

Voor Case-Ongevoelige Zoeken kunt u $toUpperaan de mix toevoegen en zoeken naar STAR WARS.


Antwoord 4, Autoriteit 4%

Dit werkte voor mij:

db.test.find({"A": {'$regex': '.*star wars.*'}})

Antwoord 5

// 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();

Antwoord 6

Deze gebruikt de aggregatie-syntaxis:

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

Other episodes