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

返す配列要素を条件付きで評価します

    これは、MongoDB2.4.9でAggregationFrameworkを使用した例であり、目的の結果が得られると思います。

    db.books.aggregate(
    
        // Unwind the refs array
        { $unwind: "$refs" },
    
        // Sort by refs.default descending so "true" values will be first, nulls last
        { $sort: {
            "refs.default" : -1
        }},
    
        // Group and take the first ref; should either be "default:true" or first element
        { $group: {
            _id: "$_id",
            name: { $addToSet: "$name" },
            refs: { $first: "$refs" }
        }},
    
        // (optional) Sort by name to match the example output
        { $sort: {
            name: 1,
        }},
    
        // (optional) Clean up output
        { $project: {
            _id: 0,
            name: 1,
            refs: 1
        }}
    )
    

    サンプル結果:

    {
        "result" : [
            {
                "name" : [
                    "Book1"
                ],
                "refs" : {
                    "oid" : "object5",
                    "default" : true
                }
            },
            {
                "name" : [
                    "Book2"
                ],
                "refs" : {
                    "oid" : "object5",
                    "default" : true
                }
            },
            {
                "name" : [
                    "Book3"
                ],
                "refs" : {
                    "oid" : "object4"
                }
            },
            {
                "name" : [
                    "Book4"
                ],
                "refs" : {
                    "oid" : "object4",
                    "default" : true
                }
            }
        ],
        "ok" : 1
    }
    

    注:

    • これは、refsのソート順の動作を前提としています。 ここで、「default:true」はありません。簡単なテストでは、元の順序が保持されているように見えるため、配列の「最初の」要素は期待どおりです。

    • 使用される集計演算子により、出力name は単一要素の配列であり、refs 埋め込みオブジェクトになります。 Aggregation Frameworkでさらに操作するのではなく、アプリケーションコードの正しいフィールドを参照するだけで済みます。



    1. Node.js、angular.js、MongoDBの使用を開始し、リレーションのモデリングやその他のランプアップのヒント

    2. redisでnodejsを使用して文字列をスキャンする

    3. Schema.ObjectIdのないマングースのDB-ref?

    4. RedHat /CentOS7システムにMongoDB4.2をインストールする方法