sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $isArray

I MongoDB kan du bruge $isArray aggregeringspipeline-operatør for at kontrollere, om en værdi er en matrix.

Det accepterer ethvert gyldigt udtryk og returnerer true hvis udtrykket er et array, false hvis det ikke er.

Eksempel

Antag, at vi har en samling kaldet test med følgende dokumenter:

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

Vi kan bruge følgende kode til at kontrollere data felt for arrays:

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

Resultat:

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

Vi kan se, at de første tre dokumenter indeholder arrays, og at de to andre ikke gør.

Vi kan også se, at det første dokument indeholder et tomt array. Det er stadig et array, og så $isArray returnerer true .

Eksempel 2

Her er et andet eksempel, der indeholder forskellige felter med forskellige BSON-typer.

Antag, at vi har en samling kaldet types med følgende dokument:

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

Til formålet med denne artikel har jeg navngivet hvert felt for at afspejle dens BSON-type.

Vi kan nu bruge følgende kode til at returnere enten true eller false for hvert felt, afhængigt af om feltet er et array eller ej:

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

Resultat:

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

Manglende felt

Anvender $isArray til et felt, der ikke eksisterer, resulterer i false .

Antag vores test samlingen indeholder følgende dokument:

{ "_id" : 6 }

Og vi anvender $isArray til det dokument:

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

Resultat:

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

Nul-værdier

Anvender $isArray til null returnerer false .

Antag vores test samlingen indeholder følgende dokument:

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

Og vi anvender $isArray til det dokument:

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

Resultat:

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

Udefinerede værdier

På samme måde returnerer levering af udefinerede værdier false .

Antag vores test samlingen indeholder følgende dokument:

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

Anvend $isArray :

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

Resultat:

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

  1. Hvordan fungerer sortering i den nye mongodb PECL-udvidelse?

  2. Datamigrering med Redis

  3. Hvordan kan jeg rydde alle forekomster af type X i ServiceStack Redis Client

  4. Kan redis pipeline flere kommandoer, der afhænger af tidligere?