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

MongoDB Dopasowuje tablicę z typem $?

W rzeczywistości w dokumentacji $type znajduje się „gotcha” konkretnie o tablicach:

Po zastosowaniu do tablic, $type dopasowuje każdy wewnętrzny element określonego typu. Bez projekcji oznacza to, że cała tablica będzie pasować, jeśli jakikolwiek element ma właściwy typ. W przypadku projekcji wyniki będą zawierały tylko te elementy żądanego typu.

Oznacza to, że zamiast wykrywać, czy „sam element” znajduje się w tablicy, testowany jest „wewnętrzny element” tablicy, aby zobaczyć, jakiego typu jest.

Teraz sama dokumentacja sugeruje ten test JavaScript z $where :

.find({ "$where": "return Array.isArray(this.author)" })

Ale myślę, że to dość okropne, ponieważ istnieje lepszy sposób.

Sztuczka polega na "notacji kropkowej", w której prosisz o 0 indeks elementu tablicy do $exists

.find({ "author.0": { "$exists": true } })

Co jest tylko podstawowym przypadkiem, w którym jeśli element „0” istnieje, to pole jest obecne, a zatem dane są tablicą.

Kiedy zrozumiesz tę logiczną przesłankę, będzie to całkiem prosty test. Jedyną rzeczą, której nie można przez to dopasować, jest "naprawdę pusta" tablica, w takim przypadku możesz w razie potrzeby wrócić do alternatywy JavaScript. Ale to może faktycznie używać indeksu, więc byłoby preferowane użycie drugiej formy.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. importowanie JSON do mongoDB za pomocą pymongo

  2. Kompresja prefiksu indeksu w MongoDB 3.0 WiredTiger

  3. Zrozumienie i zarządzanie miejscem na dysku na serwerze MongoDB

  4. MongoDB zmienia nazwę pola bazy danych w tablicy

  5. Jak zaktualizować pola dokumentów w mongo db za pomocą sterownika java?