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

MongoDBでサブ配列を検索する方法

    1つだけが必要な場合 フィールドの場合、MongoDBには「ドット表記」 があります。 ネストされた要素にアクセスする場合:

    db.collection.find({ "to.email": "[email protected]" })
    

    そして、これは一致するドキュメントを返します:

    詳細 その1つのフィールドを条件として、 $elemMatchを使用します オペレーター

    db.collection.find(
        { "to": { 
            "$elemMatch": { 
                "email": "[email protected]",
                "name": "domains",
            }
        }}
    )
    

    そして、シングルを「投影」することができます その要素を返すために一致する:

    db.collection.find({ "to.email": "[email protected]" },{ "to.$": 1 })
    

    ただし、もっとを期待する場合 1つより 一致する要素、次に集計フレームワークを使用します:

    db.collection.aggregate([
        // Matches the "documents" that contain this
        { "$match": { "to.email": "[email protected]" } },
    
        // De-normalizes the array
        { "$unwind": "$to" },
    
        // Matches only those elements that match
        { "$match": { "to.email": "[email protected]" } },
    
        // Maybe even group back to a singular document
        { "$group": {
            "_id": "$_id",
            "from_name": { "$first": "$name" },
            "to": { "$push": "$to" },
            "subject": { "$first": "$subject" }            
        }}
    
    ])
    

    必要に応じて、配列のコンテンツを照合および/または「フィルタリング」して照合するためのすべての楽しい方法。




    1. マングーススキーマのオプションフィールド

    2. 存在しない埋め込みドキュメントの巻き戻しの処理

    3. 期限切れのキーをredisはどのように使用しますか?

    4. コレクション間でドキュメントを移動することは、MongoDBの状態の変化を表す良い方法ですか?