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

MongoDB:ネストされたキーの存在

    MongoDbバージョン>=3.6では、演算子<を活用できます。 code> $ expr クエリで $ objectToArrayを使用します 演算子を使用して動的オブジェクトを配列に変換するには、 $ ifNull 条件演算子として。

    次の例は、このアプローチを示しています。

    db.collection.find({
        $expr: {
            $gt: [
                {
                    $size: {
                        $filter: {
                            input: { $objectToArray: '$$ROOT' },
                            cond: { 
                                $ifNull: ['$$this.v.work', false]
                            }
                        }
                    }
                },
                0
            ]
        }
    })
    

    値をキーとして使用することはお勧めできません。現在(そしておそらく将来も)、フィールド名にワイルドカードを使用してMongoDBコレクションをクエリすることはできません。

    クエリが簡単な代替スキーマ設計については、このモデルに従うスキーマの再設計をお勧めします。

    "_id" : ObjectId("55128d6315f3df650f2038cf"),
    "customer_name" : "test user",
    "createad" : "2011-04-14 16:44:09",
    "data" : [ 
        {
            "key" : "123456",
            "home" : {
                "id" : "1536734296",
                "last" : "2011-04-14 16:44:09"
            },
            "work" : {
                "id" : "1536734296",
                "last" : "2011-04-14 16:44:09"
            }
        }, 
        {
            "key" : "321456",
            "home" : {
                "id" : "1536734296",
                "last" : "2011-04-14 16:44:09"
            },
            "work" : {
                "id" : "1536734296",
                "last" : "2011-04-14 16:44:09"
            }
        }, 
        {
            "key" : "789654",
            "home" : {
                "id" : "1536734296",
                "last" : "2011-04-14 16:44:09"
            },
            "work" : {
                "id" : "1536734296",
                "last" : "2011-04-14 16:44:09"
            }
        }
    ]
    

    }

    次のようにクエリできます

    db.collection.find({ "data.work" : { $exists : true, $ne : null } })
    

    workの存在を確認します dataのフィールド 配列。



    1. JedisクライアントのRedisTemplateで1回の呼び出しで複数のリスト値を取得する方法

    2. Mongoose / NodeJSのタイムスタンプフィールドで個別の日付アイテムをカウントするにはどうすればよいですか?

    3. mongoのプリミティブパッケージを使用した部分一致

    4. MongodDBのドキュメントにキー名が保存されているのはなぜですか