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

埋め込みコレクションのMongoDB優先スキーマ。ドキュメントと配列

    最初のアプローチでは、idがキーとして使用されるため、idフィールドにインデックスを付けることはできません。そのようなものは、キー値辞書のように機能します。このアプローチは、既知のIDのセット(もちろん数が少ない)がある場合に役立ちます。最初の例では、IDが前面でよく知られていると仮定します。

    >>db.your_colleection.find()
     { "_id" : ObjectId("4ebbb6f974235464de49c3a5"), "name" : "bill", 
      "lines" : { 
                 "idk73716" : { "name" : "Line A" },
                 "idk51232" : { "name" : "Line B" } ,
                 "idk23321":  { "name" : "Line C" }
                } 
      }
    

    したがって、idフィールドidk73716の値を見つけるには、次の方法でこれを行うことができます

     db.your_colleection.find({},{'lines.idk73716':1})
     { "_id" : ObjectId("4ebbb6f974235464de49c3a5"), "lines" : { "idk73716" : { "name" : "Line A" } } }
    

    空の{}はクエリを示し、2番目の部分{'lines.idk73716':1}はクエリセレクタです。

    特定のフィールドだけを選択できるという利点を持つキーとしてIDを持っています。 {'lines.idk73716':1}はフィールドセレクターですが、ここではクエリおよびセレクターとして機能します。しかし、これは2番目のアプローチでは実行できません。 2番目のコレクションがこのようなものであると仮定します

    > db.second_collection.find()
    { "_id" : ObjectId("4ebbb9c174235464de49c3a6"), "name" : "bill", "lines" : [
        {
            "id" : "idk73716",
            "name" : "Line A"
        },
        {
            "id" : "idk51232",
            "name" : "Line B"
        },
        {
            "id" : "idk23321",
            "name" : "Line C"
        }
    ] }
    > 
    

    また、フィールドIDにインデックスを付けたので、IDでクエリを実行する場合

    > db.second_collection.find({'lines.id' : 'idk73716' })
    
    { "_id" : ObjectId("4ebbb9c174235464de49c3a6"), "name" : "bill", "lines" : [
        {
            "id" : "idk73716",
            "name" : "Line A"
        },
        {
            "id" : "idk51232",
            "name" : "Line B"
        },
        {
            "id" : "idk23321",
            "name" : "Line C"
        }
    ] }
    > 
    

    上記の出力を見ると、一致するサブ(埋め込み)ドキュメントだけを選択する方法はないことがわかりますが、最初のアプローチでは可能です。これはmongodbのデフォルトの動作です。

    を参照してください
    db.second_collection.find({'lines.id' : 'idk73716' },{'lines':1})
    

    idk73716だけでなく、すべての行をフェッチします

    { "_id" : ObjectId("4ebbb9c174235464de49c3a6"), "lines" : [
        {
            "id" : "idk73716",
            "name" : "Line A"
        },
        {
            "id" : "idk51232",
            "name" : "Line B"
        },
        {
            "id" : "idk23321",
            "name" : "Line C"
        }
    ] }
    

    これがお役に立てば幸いです

    編集

    @GatesVP に感​​謝します 指摘してくれて

    $ examplesを使用してIDをクエリすることはできますが、インデックスに登録することはできません



    1. または、nilまたはMongoidと一致するクエリはまだ一致しますか?

    2. mongoDBのaggregateでこの結果を取得する方法

    3. mongodbに接続する場合、connectは機能ではありません

    4. collectionfsを使用して画像を更新する