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

MongoDB $isArray

W MongoDB możesz użyć $isArray operator potoku agregacji, aby sprawdzić, czy wartość jest tablicą.

Akceptuje każde poprawne wyrażenie i zwraca true jeśli wyrażenie jest tablicą, false jeśli nie.

Przykład

Załóżmy, że mamy kolekcję o nazwie test z następującymi dokumentami:

{ "_id" : 1, "data" : [ ] }
{ "_id" : 2, "data" : [ 1, 2, 3 ] }
{ "_id" : 3, "data" : [ "XS", "M", "L" ] }
{ "_id" : 4, "data" : 123 }
{ "_id" : 5, "data" : "Homer Jay" }

Możemy użyć następującego kodu, aby sprawdzić data pole dla tablic:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 1, 2, 3, 4, 5 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Wynik:

{ "_id" : 1, "data" : [ ], "result" : true }
{ "_id" : 2, "data" : [ 1, 2, 3 ], "result" : true }
{ "_id" : 3, "data" : [ "XS", "M", "L" ], "result" : true }
{ "_id" : 4, "data" : 123, "result" : false }
{ "_id" : 5, "data" : "Homer Jay", "result" : false }

Widzimy, że pierwsze trzy dokumenty zawierają tablice, a pozostałe dwa nie.

Widzimy również, że pierwszy dokument zawiera pustą tablicę. To wciąż jest tablica, więc $isArray zwraca true .

Przykład 2

Oto kolejny przykład, który zawiera różne pola różnych typów BSON.

Załóżmy, że mamy kolekcję o nazwie types z następującym dokumentem:

{
	"_id" : ObjectId("601738d7c8eb4369cf6ad9de"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75"),
	"object" : {
		"a" : 1
	},
	"array" : [
		1,
		2,
		3
	]
}

Na potrzeby tego artykułu nazwałem każde pole, aby odzwierciedlić jego typ BSON.

Możemy teraz użyć następującego kodu, aby zwrócić wartość true lub false dla każdego pola, w zależności od tego, czy pole jest tablicą:

db.types.aggregate(
  [
    {
      $project:
        { 
          _id: { $isArray: "$_id" },
          double: { $isArray: "$double" },
          string: { $isArray: "$string" },
          boolean: { $isArray: "$boolean" },
          date: { $isArray: "$date" },
          integer: { $isArray: "$integer" },
          long: { $isArray: "$long" },
          decimal: { $isArray: "$decimal" },
          object: { $isArray: "$object" },
          array: { $isArray: "$array" }
        }
    }
  ]
).pretty()

Wynik:

{
	"_id" : false,
	"double" : false,
	"string" : false,
	"boolean" : false,
	"date" : false,
	"integer" : false,
	"long" : false,
	"decimal" : false,
	"object" : false,
	"array" : true
}

Brakujące pole

Stosowanie $isArray do pola, które nie istnieje, daje wynik false .

Załóżmy, że nasz test kolekcja zawiera następujący dokument:

{ "_id" : 6 }

I stosujemy $isArray do tego dokumentu:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 6 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Wynik:

{ "_id" : 6, "result" : false }

Wartości puste

Stosowanie $isArray na null zwraca false .

Załóżmy, że nasz test kolekcja zawiera następujący dokument:

{ "_id" : 7, "data" : null }

I stosujemy $isArray do tego dokumentu:

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 7 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Wynik:

{ "_id" : 7, "data" : null, "result" : false }

Niezdefiniowane wartości

Podobnie, podanie niezdefiniowanych wartości zwraca false .

Załóżmy, że nasz test kolekcja zawiera następujący dokument:

{ "_id" : 8, "data" : undefined }

Zastosuj $isArray :

db.test.aggregate(
  [
     { $match: { _id: { $in: [ 8 ] } } },
    {
      $project:
        { 
          _id: 1,
          data: 1,
          result: { $isArray: "$data" }
        }
    }
  ]
)

Wynik:

{ "_id" : 8, "data" : undefined, "result" : false }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Wyszukiwanie reguł regularnych według wartości całkowitej

  2. Oblicz średnią wartość dokumentu mongodb

  3. Jak działa unhideIndex() w MongoDB

  4. Tablice zagnieżdżone w Mongoose

  5. Wyświetlanie ostatniej wiadomości z każdej rozmowy z udziałem użytkownika w MongoDB