Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Cosmos DB (az Azure-ban és a Fabricben) egy natív JSON-adatmodellen keresztül nyújt sémarugalmasságot és gazdag indexelést. Minden Cosmos DB-erőforrás, beleértve az adatbázisokat, tárolókat, dokumentumokat és tárolt eljárásokat, JSON-dokumentumokként modellezhető és tárolható. A hordozhatóság követelménye, hogy a JSON (és a Cosmos DB) csak néhány alaptípust támogat: Sztring, Szám, Logikai, Tömb, Objektum és Null. A JSON azonban rugalmas, és lehetővé teszi, hogy a fejlesztők és a keretrendszerek összetettebb típusokat képviseljenek ezekkel a primitívekkel, és objektumként vagy tömbként írja őket.
Az alaptípusok mellett számos alkalmazásnak szüksége van a DateTime dátum- és időadatok megjelenítéséhez szükséges típusra. Ez a cikk azt ismerteti, hogy a fejlesztők hogyan tárolhatják, kérdezhetik le és kérdezhetik le a dátumokat a Cosmos DB-ben a .NET SDK használatával.
Store DateTimes
A Cosmos DB támogatja az olyan JSON-típusokat, mint a - sztring, szám, logikai, null, tömb, objektum. Nem támogatja közvetlenül a típust DateTime . A NoSQL API jelenleg nem támogatja a dátumok honosítását. Ezért sztringekként kell tárolnia a dátum- és időadatokat. A dátum- és idősztringek ajánlott formátuma az yyyy-MM-ddTHH:mm:ss.fffffffZISO 8601 UTC szabványt követi. Az összes dátumot a Cosmos DB-ben tárolja UTC formátumban. A dátumsztringek formátumba való konvertálása lehetővé teszi a dátumok lexikális rendezését. Ha nem UTC dátumokat tárol, a logikát az ügyféloldalon kell kezelni. Ha egy helyi dátum- és időértéket UTC-vé szeretne alakítani, az eltolást a JSON tulajdonságaként kell megadni/tárolni, és az ügyfél használhatja az eltolást az UTC dátum- és időérték kiszámításához.
A dátum- és idősztringeket szűrőként tartalmazó tartomány-lekérdezések csak akkor támogatottak, ha a dátum- és idősztringek mind UTC-ben vannak. A GetCurrentDateTime rendszerfüggvény a jelenlegi UTC dátumot és időpontot adja vissza az ISO 8601 sztring értékének formátumában: yyyy-MM-ddTHH:mm:ss.fffffffZ.
A legtöbb alkalmazás az alábbi okokból használhatja az alapértelmezett sztring-ábrázolásokat DateTime :
- A sztringek összehasonlíthatók, és a DateTime-értékek relatív sorrendje megmarad, amikor sztringekké alakulnak át.
- Ez a megközelítés nem igényel egyéni kódot vagy attribútumokat a JSON-átalakításhoz.
- A JSON-ban tárolt dátumok emberi olvashatók.
- Ez a megközelítés kihasználhatja az index előnyeit a gyors lekérdezési teljesítmény érdekében.
A következő kódrészlet például egy Order két DateTime tulajdonságot tartalmazó objektumot tárol , ShipDate és OrderDate a .NET SDK-t használó dokumentumként:
public class Order
{
[JsonProperty(PropertyName="id")]
public string Id { get; set; }
public DateTime OrderDate { get; set; }
public DateTime ShipDate { get; set; }
public double Total { get; set; }
}
await container.CreateItemAsync(
new Order
{
Id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
OrderDate = DateTime.UtcNow.AddDays(-30),
ShipDate = DateTime.UtcNow.AddDays(-14),
Total = 113.39
});
Ez a dokumentum a következő struktúrában van tárolva:
{
"id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"OrderDate": "2014-09-15T23:14:25.7251173Z",
"ShipDate": "2014-09-30T23:14:25.7251173Z",
"Total": 113.39
}
``
Alternatively, you can store DateTimes as Unix timestamps, that is, as a number representing the number of elapsed seconds since **January 1, 1970**. Cosmos DB's internal timestamp (`_ts`) property follows this approach. You can use the [`UnixDateTimeConverter`](/dotnet/api/microsoft.azure.documents.unixdatetimeconverter) class to serialize dates and times as numbers.
## Query date and time in LINQ
The .NET SDK automatically supports querying data stored using Language Integrated Query (LINQ). For example, the following snippet shows a LINQ query that filters orders that were shipped in the last three days:
```csharp
IQueryable<Order> orders = container
.GetItemLinqQueryable<Order>(allowSynchronousQueryExecution: true)
.Where(o => o.ShipDate >= DateTime.UtcNow.AddDays(-3));
A LINQ-lekérdezés a következő SQL-utasításra lesz lefordítva, és a Cosmos DB-n hajtja végre:
SELECT
*
FROM
root
WHERE
(root["ShipDate"] >= "2014-09-30T23:14:25.7251173Z")
A lekérdezés nyelvével és a LINQ-szolgáltatóval kapcsolatos további információkért tekintse meg a LINQ–SQL-fordítást.
Tartomány-lekérdezések indexelési dátuma és ideje
A lekérdezések gyakran szerepelnek az értékekben DateTime . A lekérdezések hatékony végrehajtásához indexet kell definiálnia a lekérdezés szűrőjének bármely tulajdonságán.
További információ az indexelési szabályzatok konfigurálásáról: indexelési szabályzatok.