MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB:Istnienie zagnieżdżonego klucza

Z MongoDb w wersji>=3.6 możesz wykorzystać operator $expr w zapytaniu i użyj $objectToArray operator do konwersji obiektu dynamicznego na tablicę, filtruj tablicę dla pola wartości pracy za pomocą $ifNull jako operator warunkowy.

Poniższy przykład ilustruje to podejście:

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

Nie jest dobrą praktyką posiadanie wartości jako kluczy i obecnie (i prawdopodobnie także w przyszłości) nie jest możliwe odpytywanie kolekcji MongoDB za pomocą symboli wieloznacznych w nazwach pól.

W przypadku alternatywnego projektu schematu łatwego do zapytania, sugerowałbym przeprojektowanie schematu zgodnie z następującym modelem:

"_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"
        }
    }
]

}

Które możesz zapytać w następujący sposób

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

aby sprawdzić istnienie work pole w data tablica.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Maskowanie danych osobowych w MongoDB, Cassandra i Elasticsearch za pomocą DarkShield:…

  2. Sortuj po stronie klienta Meteor Kolekcja

  3. Odmowa dostępu, gdy próbowałem zainstalować 64-bitową wersję mongodb na serwerze Windows 2008

  4. Czytaj z wtórnej repliki ustawionej w mongodb poprzez javascript

  5. Mongodb:wiele kolekcji lub jedna duża kolekcja z indeksem