sql >> データベース >  >> NoSQL >> MongoDB

MongoDBで、ある文字列フィールドに別の文字列フィールドが含まれているかどうかに基づいてクエリを実行する方法

    これは$whereで行うことができます RegExpを作成する string1の場合 次に、string2に対してテストします。 :

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

    ただし、MongoDB 3.4以降を使用している場合は、 $indexOfCP 集計演算子:

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

    または、$redactを使用して直接 :

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



    1. ノード/redisとコールバックの制御フローの問題?

    2. コレクション内のプロパティをマッピングするためのmap/reduceの使用

    3. MongoDB-インストールエラー-mongodbセットアップウィザードが途中で終了しました

    4. MongoDB$text検索でANDとNOTを行う方法