API kueri JavaScript di Azure Cosmos DB

BERLAKU UNTUK: NoSQL

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 mewaspadai 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 dalam Microsoft Azure Cosmos DB.

Fungsi JavaScript yang didukung

Fungsi Keterangan
chain() ... .value([callback] [, options]) Memulai panggilan berantai yang harus diakhiri dengan nilai().
filter(predicateFunction [, options] [, callback]) Memfilter input menggunakan fungsi predikat yang mengembalikan benar/salah untuk memfilter dokumen input yang masuk/keluar ke dalam set yang dihasilkan. Fungsi ini berperilaku mirip dengan klausa WHERE di SQL.
flatten([isShallow] [, options] [, callback]) Menggabungkan dan meratakan array dari setiap item input ke dalam satu array. Fungsi ini berperilaku mirip dengan SelectMany di LINQ.
map(transformationFunction [, options] [, callback]) Menerapkan proyeksi mengingat fungsi transformasi yang memetakan setiap item input ke objek atau nilai JavaScript. Fungsi ini berperilaku mirip dengan klausa SELECT di SQL.
pluck([propertyName] [, options] [, callback]) Fungsi ini adalah pintasan untuk peta yang mengekstrak nilai properti tunggal dari setiap item input.
sortBy([predicate] [, options] [, callback]) Menghasilkan set dokumen baru dengan mengurutkan dokumen dalam aliran dokumen input dalam urutan naik dengan menggunakan predikat yang diberikan. Fungsi ini berperilaku mirip dengan klausa ORDER BY di SQL.
sortByDescending([predicate] [, options] [, callback]) Menghasilkan set dokumen baru dengan mengurutkan dokumen dalam aliran dokumen input dalam urutan naik dengan menggunakan predikat yang diberikan. Fungsi ini berperilaku mirip dengan klausa 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 seseorang dengan person.pets akan menghasilkan tupel [seseorang, hewan peliharaan]. Ini mirip dengan SelectMany di .NET LINQ.

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

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

Konstruksi JavaScript berikut tidak dioptimalkan untuk indeks Microsoft Azure Cosmos DB:

  • Alur kontrol: ifforwhile
  • Panggilan fungsi

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

Lembar contekan SQL ke JavaScript

Tabel berikut menyajikan berbagai kueri SQL dan kueri JavaScript yang sesuai. Seperti halnya kueri SQL, properti (misalnya, item.id) peka huruf besar/kecil.

Catatan

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

SQL API Kueri JavaScript Keterangan
PILIH *
DARI dok
__.map(function(doc) {
    return doc;
});
Menghasilkan semua dokumen (paginasi dengan token kelanjutan) apa adanya.
PILIH
   docs.id,
   docs.message AS msg,
   docs.actions
DARI dok
__.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 dok
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Kueri untuk dokumen dengan predikat: id = "X998_Y998".
PILIH *
DARI dok
WHERE
   ARRAY_CONTAINS(docs.Tags, 123)
__.filter(function(doc) {
    return x.Tags && x.Tags.indexOf(123) > -1;
});
Kueri untuk dokumen yang memiliki properti Tag dan Tag adalah array yang berisi nilai 123.
SELECT
   docs.id,
   docs.message AS msg
DARI dok
WHERE
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        return doc.id ==="X998_Y998";
    })
    .map(function(doc) {
       return {
            id: doc.id,
            msg: doc.message
       };
    })
.value();
Kueri untuk dokumen dengan predikat, id = "X998_Y998", lalu memproyeksikan id dan pesan (alias ke msg).
PILIH tag NILAI
DARI dok
GABUNG tag DI dokumen. Tag
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        return doc.Tags && Array.isArray(doc.Tags);
    })
    .sortBy(function(doc) {
        return doc._ts;
    })
    .pluck("Tags")
    .flatten()
    .value()
Filter untuk dokumen yang memiliki properti array, Tag, dan mengurutkan dokumen yang dihasilkan menurut properti sistem tanda waktu _ts, lalu proyeksikan + ratakan array Tag.

Langkah berikutnya

Pelajari selengkapnya konsep dan cara menulis serta menggunakan prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna di Microsoft Azure Cosmos DB: