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

マングース-基準によるサブドキュメントの検索

    $elemMatchを使用できます 最新のMongoDBバージョンではクエリ射影演算子として。モンゴシェルから:

    db.parents.find(
        {'children.age': {$gte: 18}},
        {children:{$elemMatch:{age: {$gte: 18}}}})
    

    これにより、childrenから幼児のドキュメントが除外されます。 配列:

    { "_id" : ..., "children" : [ { "name" : "Margaret", "age" : 20 } ] }
    { "_id" : ..., "children" : [ { "name" : "John", "age" : 22 } ] }
    

    ご覧のとおり、子はまだ親ドキュメント内でグループ化されています。 MongoDBクエリは、コレクションからドキュメントを返します。アグリゲーションフレームワークの$unwindを使用できます それらを別々のドキュメントに分割する方法:

    > db.parents.aggregate({
        $match: {'children.age': {$gte: 18}}
    }, {
        $unwind: '$children'
    }, {
        $match: {'children.age': {$gte: 18}}
    }, {
        $project: {
            name: '$children.name',
            age:'$children.age'
        }
    })
    {
        "result" : [
            {
                "_id" : ObjectId("51a7bf04dacca8ba98434eb5"),
                "name" : "Margaret",
                "age" : 20
            },
            {
                "_id" : ObjectId("51a7bf04dacca8ba98434eb6"),
                "name" : "John",
                "age" : 22
            }
        ],
        "ok" : 1
    }
    

    $matchを繰り返します パフォーマンスの条項:初めてそれを通過すると、いいえの親が排除されます 18歳以上の子供なので、$unwind 有用なドキュメントのみを考慮します。 2番目の$match $unwindを削除します 一致しない出力、および$project 子供の情報をサブドキュメントからトップレベルに引き上げます。



    1. MongoDB$sortByCount集約演算子

    2. MongoDBに日付を保存するための最良の方法は何ですか?

    3. MongoDB GUIクライアント(クロスプラットフォームまたはLinux)

    4. AWSLambdaおよびRedisクライアント。コールバックを呼び出せないのはなぜですか?