API kueri JavaScript di Azure Cosmos DB

Selain mengeluarkan kueri menggunakan API untuk NoSQL di Azure Cosmos DB, SDK sisi server Azure Cosmos DB menyediakan antarmuka JavaScript untuk melakukan kueri yang dioptimalkan di Prosedur dan Pemicu Tersimpan Azure Cosmos DB. Anda tidak perlu mengetahui bahasa SQL untuk menggunakan antarmuka JavaScript ini. API kueri JavaScript memungkinkan Anda membuat kueri secara terprogram dengan meneruskan fungsi predikat ke dalam urutan panggilan fungsi, dengan sintaks yang mirip dengan bawaan array ECMAScript5 dan pustaka JavaScript populer seperti Lodash. Kueri diurai oleh runtime JavaScript dan dijalankan secara efisien menggunakan indeks Azure Cosmos DB.

Fungsi JavaScript yang didukung

Fungsi Deskripsi
chain() ... .value([callback] [, options]) Memulai panggilan berantai yang harus dihentikan dengan value().
filter(predicateFunction [, options] [, callback]) Memfilter input menggunakan fungsi predikat yang mengembalikan true/false untuk memfilter dokumen input masuk/keluar ke dalam set yang dihasilkan. Fungsi ini berulah mirip dengan klausa WHERE di SQL.
flatten([isShallow] [, options] [, callback]) Menggabungkan dan meratakan array dari setiap item input ke dalam satu array. Fungsi ini bereaksi mirip dengan SelectMany di LINQ.
map(transformationFunction [, options] [, callback]) Menerapkan proyeksi yang diberikan fungsi transformasi yang memetakan setiap item input ke objek atau nilai JavaScript. Fungsi ini berulah mirip dengan klausa SELECT di SQL.
pluck([propertyName] [, options] [, callback]) Fungsi ini adalah pintasan untuk peta yang mengekstrak nilai satu properti dari setiap item input.
sortBy([predicate] [, options] [, callback]) Menghasilkan sekumpulan dokumen baru dengan mengurutkan dokumen dalam aliran dokumen input dalam urutan naik dengan menggunakan predikat yang diberikan. Fungsi ini berulah mirip dengan klausul ORDER BY di SQL.
sortByDescending([predicate] [, options] [, callback]) Menghasilkan sekumpulan dokumen baru dengan mengurutkan dokumen dalam aliran dokumen input dalam urutan turun menggunakan predikat yang diberikan. Fungsi ini berulah mirip dengan klausul ORDER BY x DESC di SQL.
unwind(collectionSelector, [resultSelector], [options], [callback]) Melakukan gabungan mandiri dengan array dalam dan menambahkan hasil dari kedua sisi sebagai tuple ke proyeksi hasil. Misalnya, menggabungkan dokumen orang dengan person.pets akan menghasilkan pasangan [orang, hewan peliharaan]. Ini mirip dengan SelectMany di .NET LINQ.

Ketika disertakan dalam fungsi predikat dan/atau pemilih, konstruksi JavaScript berikut dioptimalkan secara otomatis untuk berjalan langsung pada indeks Azure Cosmos DB:

  • Operator sederhana: =+-*/%|^&==!====!==<><=>=||&&<<>>>>>~
  • Literal, termasuk objek harfiah: {}
  • var, return

Konstruksi JavaScript berikut tidak dioptimalkan untuk indeks Azure Cosmos DB:

  • Alur kontrol: ifforwhile
  • Panggilan fungsi

Untuk informasi selengkapnya, lihat Dokumentasi JavaScript Sisi Server Azure Cosmos DB.

Panduan cepat SQL untuk JavaScript

Tabel berikut menyajikan berbagai kueri SQL dan kueri JavaScript terkait. Seperti halnya kueri SQL, properti (misalnya, item.id) sangat sensitif terhadap huruf kapital.

Nota

__ (garis bawah ganda) adalah alias untuk getContext().getCollection() saat menggunakan API kueri JavaScript.

SQL API Kueri JavaScript Deskripsi
PILIH*
DARI DOKUMEN
__.map(function(doc) {
    mengembalikan dokumen;
});
Menghasilkan semua dokumen (dipaginasi dengan token kelanjutan) sebagaimana adanya.
PILIH
   docs.id,
   docs.message AS msg,
   docs.actions
DARI DOKUMEN
__.map(function(doc) {
    return {
        id: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Memproyeksikan id, pesan (alias ke msg), dan tindakan dari semua dokumen.
PILIH*
DARI DOKUMEN
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Kueri untuk dokumen dengan predikat: id = "X998_Y998".
PILIH*
DARI DOKUMEN
WHERE
   ARRAY_CONTAINS(dokumen. Tag, 123)
__.filter(function(x) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Kueri untuk dokumen yang memiliki properti Tags dan Tags adalah array yang berisi nilai 123.
SELECT
   docs.id,
   docs.message AS msg
DARI DOKUMEN
WHERE
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        return doc.id ==="X998_Y998";
    })
    .map(function(doc) {
       return {
            id: doc.id,
            msg: doc.pesan
       };
    })
.value();
Kueri yang mencari dokumen dengan predikat, id = "X998_Y998", kemudian memproyeksikan id dan pesan yang diberi alias sebagai msg.
PILIH tag NILAI
DARI DOKUMEN
JOIN tag IN docs. Tags
URUTKAN BERDASARKAN docs._ts
__.chain()
    .filter(function(doc) {
        kembalikan doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        kembalikan doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Filter untuk dokumen yang memiliki properti array, Tags, dan mengurutkan dokumen yang dihasilkan berdasarkan properti sistem penanda waktu _ts, kemudian memproyeksikan dan meratakan array Tags.

Langkah berikutnya

Pelajari lebih lanjut konsep dan cara menulis dan menggunakan prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna di Azure Cosmos DB: