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

マングース検索を使用して文字列の一部を含むすべての値を取得するにはどうすればよいですか?

    あなたはほとんど自分のタグでこれに答えました。 MongoDBには$regexがあります 正規表現をクエリとして送信できるようにする演算子。したがって、「Alex」を含む文字列をクエリするには、次のようにします。

    Books.find(
        { "authors": { "$regex": "Alex", "$options": "i" } },
        function(err,docs) { 
        } 
    );
    

    これを行うこともできます:

    Books.find(
        { "authors": /Alex/i }, 
        function(err,docs) { 
    
        }
    );
    

    どちらも有効であり、ドキュメントに示されているサポートされている正しい構文で試した方法とは異なります。

    しかしもちろん、実際に「文字列のどこかで「Alex」に一致するものに対してのみ「配列」の結果を取得する方法」を尋ねている場合はどうでしょうか。それならこれは少し違います。

    1つ以上の複雑なマッチング 配列要素は、配列コンテンツを「フィルタリング」する必要がある集約フレームワーク(または、場合によってはmapReduceですが、はるかに低速です)のドメインです。

    あなたはほとんど同じことから始めます。ここで重要なのは、 $unwindです。 個々のドキュメントとして適切に「フィルタリング」できるように、配列の内容を「非正規化」します。次に、「一致する」ドキュメントを使用してアレイを再構築します。

    Books.aggregate(
        [
            // Match first to reduce documents to those where the array contains the match
            { "$match": {
                "authors": { "$regex": "Alex", "$options": i }
            }},
    
            // Unwind to "de-normalize" the document per array element
            { "$unwind": "$authors" },
    
            // Now filter those document for the elements that match
            { "$match": {
                "authors": { "$regex": "Alex", "$options": i }
            }},
    
            // Group back as an array with only the matching elements
            { "$group": {
                "_id": "$_id",
                "title": { "$first": "$title" },
                "authors": { "$push": "$authors" },
                "subjects": { "$first": "$subjects" }
            }}
        ],
        function(err,results) {
    
        }
    )
    


    1. DevOpsオープンソースデータベース監査マニュアル-知っておくべきことすべて

    2. java.lang.IncompatibleClassChangeError:クラスMongoの実装

    3. Express.jsとは何ですか?

    4. phpでアップサートした後にmongodb_idオブジェクトを取得します