sql >> Database >  >> NoSQL >> MongoDB

In MongoDB, hoe een query uit te voeren op basis van of een tekenreeksveld een ander bevat?

U kunt dit doen met $where door een RegExp . te maken voor string1 en vervolgens testen tegen string2 :

db.test.find({$where: 'RegExp(this.string1).test(this.string2)'})

Als u echter MongoDB 3.4+ gebruikt, kunt u dit efficiënter doen door de $indexOfCP aggregatie-operator:

db.test.aggregate([
    // Project  the index of where string1 appears in string2, along with the original doc.
    {$project: {foundIndex: {$indexOfCP: ['$string2', '$string1']}, doc: '$$ROOT'}},
    // Filter out the docs where the string wasn't found
    {$match: {foundIndex: {$ne: -1}}},
    // Promote the original doc back to the root
    {$replaceRoot: {newRoot: '$doc'}}
])

Of directer door ook $redact . te gebruiken :

db.test.aggregate([
    {$redact: {
        $cond: {
            if: { $eq: [{$indexOfCP: ['$string2', '$string1']}, -1]},
            then: '$$PRUNE',
            else: '$$KEEP'
        }
    }}
])



  1. MongoDB haalt alleen overeenkomende subdocumenten op uit een document met c#

  2. Wat stellen lege vierkante haken voor als variabele waarde in javascript?

  3. dood zombie dode regioservers

  4. Hoe haal je alle sleutels die overeenkomen met een specifiek patroon uit een hash in redis?