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

MongoDB operator zapytań typu $

W MongoDB możesz użyć $type elementowy operator zapytania do filtrowania kolekcji dokumentów na podstawie typu BSON. Zwraca tylko te dokumenty, które mają określony typ BSON w określonym polu.

Podajesz pole i typ BSON oraz $type zwróci wszystkie pasujące dokumenty.

Przykład

Załóżmy, że wstawiamy następujące dokumenty do zbioru o nazwie employees :

db.employees.insertMany([
    { _id: 1, name: "Sandy", remuneration: "Too Much!!!" },
    { _id: 2, name: "Sarah", remuneration: NumberInt(128000) },
    { _id: 3, name: "Fritz", remuneration: 25000 },
    { _id: 4, name: "Chris", remuneration: NumberDecimal("45000.75") },
    { _id: 5, name: "Beck", remuneration: "10% commission" },
    { _id: 6, name: "Peter", remuneration: "70K" },
    { _id: 7, name: "Homer", remuneration: null },
    ])

Każdy dokument zawiera pracownika wraz z wynagrodzeniem tego pracownika.

Jednak chociaż każdy dokument ma remuneration widzimy, że nie ma spójności między dokumentami w odniesieniu do typu BSON używanego w tym polu.

Możemy użyć $type operator zapytania, aby zwrócić tylko te dokumenty, dla których remuneration pole jest określonego typu BSON.

Przykład:

db.employees.find( { remuneration: { $type: "double" } } )

Wynik:

{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }

W tym przypadku tylko jeden dokument ma typ BSON typu double w remuneration pole.

Zobaczmy, które z nich zawierają ciągi:

db.employees.find( { remuneration: { $type: "string" } } )

Wynik:

{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" }
{ "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" }
{ "_id" : 6, "name" : "Peter", "remuneration" : "70K" }

number Alias

Możesz użyć number alias jako wygodny sposób zwracania dokumentów zawierających typy liczbowe.

Alias ​​numeru pasuje do następujących typów BSON:

  • double
  • 32-bit integer
  • 64-bit integer
  • decimal

Przykład:

db.employees.find( { remuneration: { $type: "number" } } )

Wynik:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") }

Sprawdź wiele typów

Możesz sprawdzić wiele typów, dostarczając tablicę typów BSON.

Przykład:

db.employees.find( { 
  remuneration: { $type: ["double", "int", "null"] } 
  } )

Wynik:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

Filtruj według numeru

Każdy typ BSON ma odpowiedni numer i alias (zgodnie z dokumentacją MongoDB).

W poprzednich przykładach użyto aliasu. Możesz alternatywnie użyć numeru zamiast aliasu typu BSON.

Przykład:

db.employees.find( { 
  remuneration: { $type: [1, 16, 10] } 
  } )

Wynik:

{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 }
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
{ "_id" : 7, "name" : "Homer", "remuneration" : null }

W tym przypadku podałem tablicę liczb, które odpowiadają double , int i null (co zwraca ten sam wynik, co w poprzednim przykładzie).

Przed MongoDB 3.2 akceptowane były tylko liczby z $type operator zapytania. Aliasy ciągów są akceptowane dopiero od MongoDB 3.2.

Zwróć typ pola

Jest też $type operator potoku agregacji, który pozwala uzyskać typ BSON wartości pola.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Monitorowanie instancji MongoDB za pomocą usługi monitorowania MongoDB (MMS)

  2. Częściowa aktualizacja poddokumentu za pomocą nodejs/mongoose

  3. Jak uzyskać dane ReferenceField w mongoengine?

  4. Uzyskaj dokumenty z tagami na liście, uporządkowane według łącznej liczby dopasowań

  5. Sprawdź, czy pole istnieje w MongoDB