sql >> Databáze >  >> NoSQL >> MongoDB

Jak v MongoDB provádět dotaz na základě toho, zda jedno pole řetězce obsahuje jiné

Můžete to udělat pomocí $where vytvořením RegExp pro string1 a poté jej otestujte proti string2 :

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

Pokud však používáte MongoDB 3.4+, můžete to udělat efektivněji pomocí $indexOfCP operátor agregace:

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'}}
])

Nebo přímo pomocí $redact :

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



  1. Získejte počet polí v každém dokumentu pomocí dotazu pomocí java ovladače MongoDB

  2. Existuje analog MGET pro hashe Redis?

  3. Lze nastavit frekvenci srdečního tepu nebo časový limit repliky?

  4. Redis - Použití CONFIG SET za chodu ve vztahu master slave