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

Mongodbは複数のサブ配列の結果を返し、他の返された結果を除外します

    必要なのは、"aggregation" です。 および $ map および $ setDifference 演算子

    db.collection.aggregate([ 
        { 
            "$match": { 
                "node.-user": "Zulu99", 
                "node.-lat": "-37.6787103" 
            }
        },
        { 
            "$project": { 
                "node": { 
                    "$setDifference": [{ 
                        "$map": { 
                            "input": "$node",
                            "as": "n", 
                            "in": { 
                                "$cond": [
                                    { "$eq": [ "$$n.-user", "Zulu99" ]}, 
                                    "$$n", 
                                    false 
                                ]
                            } 
                        }
                    }, 
                    [false]]
                }
            }
        }
    ])
    

    MongoDB 3.2から、 $ filterを使用できます オペレーター

    db.collection.aggregate([
        { 
            "$match":  { 
                "node.-user": "Zulu99",
                "node.-lat": "-37.6787103"
            }
        }, 
        { "$project": {
            "node": {
                "$filter": {
                    "input": "$node",
                    "as": "n",
                    "cond": { "$eq": [ "$$node.n", "Zulu99" ] }
                }
            }
        }}
    ])
    

    これにより、次のようになります:

    {
            "_id" : ObjectId("55acf6187d4c31475417fa62"),
            "node" : [
                    {
                            "-id" : "60648717",
                            "-uid" : "46482",
                            "-user" : "Zulu99",
                            "-lat" : "-37.6796337",
                            "-lon" : "144.9220639",
                            "-timestamp" : "2009-12-12T21:29:36Z",
                            "-visible" : "true",
                            "-version" : "2",
                            "-changeset" : "3358816"
                    },
                    {
                            "-id" : "60648718",
                            "-timestamp" : "2009-12-12T21:29:35Z",
                            "-uid" : "46482",
                            "-version" : "2",
                            "-changeset" : "3358816",
                            "-user" : "Zulu99",
                            "-visible" : "true",
                            "-lat" : "-37.6787103",
                            "-lon" : "144.9224609"
                    }
            ]
    }
    


    1. MongoDBの1つのコマンドで増分2フィールドを更新するにはどうすればよいですか?

    2. 同じドキュメント内の2つの時間フィールドを比較するMongoid名前付きスコープ

    3. SpringDataMongoDBでのカスタムカスケード

    4. mongo集約フレームワークを使用して配列の特定の要素でグループ化