Udostępnij za pośrednictwem


Praca z plikiem JSON w usłudze Azure Cosmos DB for NoSQL

DOTYCZY: NoSQL

W usłudze Azure Cosmos DB for NoSQL elementy są przechowywane jako dane JSON. System typów i wyrażenia są ograniczone do obsługi tylko typów JSON. Aby uzyskać więcej informacji, zobacz specyfikację JSON.

Podsumujemy niektóre ważne aspekty pracy z plikiem JSON:

  • Obiekty JSON zawsze zaczynają się od lewego nawiasu klamrowego { i kończą się prawym nawiasem klamrowym }
  • Właściwości JSON mogą być zagnieżdżone w obrębie siebie
  • Wartości właściwości JSON mogą być tablicami
  • W nazwach właściwości JSON jest rozróżniana wielkość liter
  • Nazwa właściwości JSON może być dowolną wartością ciągu (w tym spacjami lub znakami, które nie są literami)

Właściwości zagnieżdżone

Dostęp do zagnieżdżonego kodu JSON można uzyskać przy użyciu metody dostępu kropkowego (.). W zapytaniach można używać zagnieżdżonych właściwości JSON w taki sam sposób, jak w przypadku innych właściwości.

Oto dokument z zagnieżdżonym plikiem JSON:

{
  "name": "Teapo rainbow surfboard",
  "manufacturer": {
    "name": "AdventureWorks"
  },
  "releaseDate": null,
  "metadata": {
    "sku": "72109",
    "colors": [
      "cruise",
      "picton-blue"
    ],
    "sizes": {
      "small": {
        "inches": 76,
        "feet": 6.33333
      },
      "large": {
        "inches": 92,
        "feet": 7.66667
      }
    }
  }
}

W tym przypadku skuwłaściwości , colorsi sizes są zagnieżdżone we metadata właściwości . Właściwość name jest również zagnieżdżona we manufacturer właściwości .

Ten pierwszy przykład obejmuje trzy zagnieżdżone właściwości.

SELECT
    p.manufacturer.name,
    p.metadata.sku,
    p.metadata.sizes.small.inches AS size
FROM
    products p
[
  {
    "name": "AdventureWorks",
    "sku": "72109",
    "size": 76
  }
]

Praca z tablicami

Oprócz właściwości zagnieżdżonych kod JSON obsługuje również tablice. Podczas pracy z tablicami można uzyskać dostęp do określonego elementu w tablicy, odwołując się do jego położenia.

Ten przykład uzyskuje dostęp do elementu tablicy w określonej pozycji.

SELECT
    p.name,
    p.metadata.colors
FROM
    products p
WHERE
    p.metadata.colors[0] NOT LIKE "%orange%"
[
  {
    "name": "Teapo rainbow surfboard",
    "colors": [
      "cruise",
      "picton-blue"
    ]
  }
]

W większości przypadków podczas pracy z tablicami należy jednak użyć podzapytania lub samosprzężenia .

Oto zapytanie, które zwraca wiele permutacji przy użyciu potencjalnych wartości tablicy i sprzężenia krzyżowego,

SELECT
    p.name,
    c AS color
FROM
    products p
JOIN
    c IN p.metadata.colors
[
  {
    "name": "Teapo rainbow surfboard",
    "color": "cruise"
  },
  {
    "name": "Teapo rainbow surfboard",
    "color": "picton-blue"
  }
]

W innym przykładzie zapytanie może być również używane EXISTS z podzapytaniem.

SELECT VALUE
    p.name
FROM
    products p
WHERE
    EXISTS (SELECT VALUE 
        c
    FROM
        c IN p.metadata.colors
    WHERE
        c LIKE "%picton%")
[
  "Teapo rainbow surfboard"
]

Różnica między wartościami null i niezdefiniowana

Jeśli właściwość nie jest zdefiniowana w elemencie, jego wartość to undefined. Właściwość z wartością null musi być jawnie zdefiniowana i przypisana null wartość.

Usługa Azure Cosmos DB for NoSQL obsługuje dwie przydatne funkcje systemowe sprawdzania typów dla null właściwości i undefined :

  • IS_NULL — sprawdza, czy wartość właściwości to null.
  • IS_DEFINED — sprawdza, czy wartość właściwości jest zdefiniowana lub undefined.

Oto przykładowe zapytanie sprawdzające dwa pola w każdym elemencie w kontenerze.

SELECT
    IS_NULL(p.releaseDate) AS isReleaseDateNull,
    IS_DEFINED(p.releaseDate) AS isReleaseDateDefined,
    IS_NULL(p.retirementDate) AS isRetirementDateNull,
    IS_DEFINED(p.retirementDate) AS isRetirementDateDefined
FROM
    products p
[
  {
    "isReleaseDateNull": true,
    "isReleaseDateDefined": true,
    "isRetirementDateNull": false,
    "isRetirementDateDefined": false
  }
]

Aby uzyskać więcej informacji o typowych operatorach i ich zachowaniu dla null i undefined wartości, zobacz operatory równości i porównania.

Zastrzeżone słowa kluczowe i znaki specjalne w formacie JSON

Dostęp do właściwości można uzyskać przy użyciu operatora []właściwości cytowanej . Na przykład elementy SELECT c.grade i SELECT c["grade"] są równoważne. Ta składnia jest przydatna do ucieczki właściwości zawierającej spacje, znaki specjalne lub ma taką samą nazwę jak słowo kluczowe SQL lub słowo zarezerwowane.

Oto zapytanie, które odwołuje się do właściwości na kilka różnych sposobów.

SELECT
    p.manufacturer.name AS dotNotationReference,
    p["manufacturer"]["name"] AS bracketReference,
    p.manufacturer["name"] AS mixedReference
FROM
    products p
[
  {
    "dotNotationReference": "AdventureWorks",
    "bracketReference": "AdventureWorks",
    "mixedReference": "AdventureWorks"
  }
]

Wyrażenia JSON

Projekcja zapytań obsługuje wyrażenia i składnię JSON.

SELECT {
    "productName": p.name,
    "largeSizeInFeet": p.metadata.sizes.large.feet
}
FROM
    products p
[
  {
    "$1": {
      "productName": "Teapo rainbow surfboard",
      "largeSizeInFeet": 7.66667
    }
  }
]

W tym przykładzie klauzula SELECT tworzy obiekt JSON. Ponieważ w przykładzie nie podano żadnego klucza, klauzula używa niejawnej nazwy $<index-number>zmiennej argumentu .

W tym przykładzie jawnie nadaj tej samej nazwie to samo pole.

SELECT {
    "productName": p.name,
    "largeSizeInFeet": p.metadata.sizes.large.feet
} AS product
FROM
    products p
[
  {
    "product": {
      "productName": "Teapo rainbow surfboard",
      "largeSizeInFeet": 7.66667
    }
  }
]

Alternatywnie zapytanie może spłaszczać obiekt, aby uniknąć nazewnictwa nadmiarowego pola.

SELECT VALUE {
    "productName": p.name,
    "largeSizeInFeet": p.metadata.sizes.large.feet
}
FROM
    products p
[
  {
    "productName": "Teapo rainbow surfboard",
    "largeSizeInFeet": 7.66667
  }
]

Wartości aliasu

Możesz jawnie aliasować wartości w zapytaniach. Jeśli zapytanie ma dwie właściwości o tej samej nazwie, użyj aliasu, aby zmienić nazwę jednej lub obu właściwości, aby były one uściślane w przewidywanym wyniku.

Przykłady

Słowo AS kluczowe używane do aliasowania jest opcjonalne, jak pokazano w poniższym przykładzie.

SELECT
    p.name,
    p.metadata.sku AS modelNumber
FROM
    products p
[
  {
    "name": "Teapo rainbow surfboard",
    "modelNumber": "72109"
  }
]

Wartości aliasów z zastrzeżonymi słowami kluczowymi lub znakami specjalnymi

Nie można używać aliasu do projekcji wartości jako nazwy właściwości z spacją, znakiem specjalnym lub słowem zarezerwowanym. Jeśli na przykład chcesz zmienić projekcję wartości na , aby mieć nazwę właściwości z spacją, możesz użyć wyrażenia JSON.

Oto przykład:

SELECT VALUE {
    "Product's name | ": p.name,
    "Model number => ": p.metadata.sku
}
FROM
    products p
[
  {
    "Product's name | ": "Teapo rainbow surfboard",
    "Model number => ": "72109"
  }
]