sql >> Database >  >> NoSQL >> MongoDB

MongoDB $isArray

In MongoDB kun je de $isArray . gebruiken aggregatiepijplijnoperator om te controleren of een waarde al dan niet een array is.

Het accepteert elke geldige uitdrukking en retourneert true als de uitdrukking een array is, false als dat niet het geval is.

Voorbeeld

Stel dat we een verzameling hebben met de naam test met de volgende documenten:

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

We kunnen de volgende code gebruiken om de data te controleren veld voor arrays:

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

Resultaat:

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

We kunnen zien dat de eerste drie documenten arrays bevatten en de andere twee niet.

We kunnen ook zien dat het eerste document een lege array bevat. Dat is nog steeds een array, en dus $isArray retourneert true .

Voorbeeld 2

Hier is nog een voorbeeld dat verschillende velden van verschillende BSON-typen bevat.

Stel dat we een verzameling hebben met de naam types met het volgende document:

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

Voor het doel van dit artikel heb ik elk veld een naam gegeven om het BSON-type weer te geven.

We kunnen nu de volgende code gebruiken om true . te retourneren of false voor elk veld, afhankelijk van of het veld al dan niet een array is:

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()

Resultaat:

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

Ontbrekend veld

$isArray toepassen naar een veld dat niet bestaat resulteert in false .

Stel dat onze test collectie bevat het volgende document:

{ "_id" : 6 }

En we passen $isArray . toe naar dat document:

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

Resultaat:

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

Null-waarden

$isArray toepassen naar null retourneert false .

Stel dat onze test collectie bevat het volgende document:

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

En we passen $isArray . toe naar dat document:

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

Resultaat:

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

Ongedefinieerde waarden

Op dezelfde manier retourneert het leveren van ongedefinieerde waarden false .

Stel dat onze test collectie bevat het volgende document:

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

Pas $isArray toe :

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

Resultaat:

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

  1. Grote gegevensworkflows met panda's

  2. Hoe Redis op ElasticBeanstalk te installeren en configureren

  3. Spring Session Data Redis - Krijg geldige sessies, huidige gebruiker van Redis Store

  4. Controleer of elk element in de array overeenkomt met de voorwaarde