Azure Cosmos DB’de JavaScript sorgu API’si

UYGULANANLAR: NoSQL

Azure Cosmos DB'de NoSQL api'sini kullanarak sorgu vermenin yanı sıra Azure Cosmos DB sunucu tarafı SDK'sı , Azure Cosmos DB Saklı Yordamları ve Tetikleyicileri'nde iyileştirilmiş sorgular gerçekleştirmek için bir JavaScript arabirimi sağlar. Bu JavaScript arabirimini kullanmak için SQL dilini bilmeniz gerekmez. JavaScript sorgu API'si, koşul işlevlerini ECMAScript5'in dizi yerleşiklerine ve Lodash gibi popüler JavaScript kitaplıklarına benzer bir söz dizimi ile işlev çağrıları dizisine geçirerek program aracılığıyla sorgular oluşturmanıza olanak tanır. Sorgular JavaScript çalışma zamanı tarafından ayrıştırılır ve Azure Cosmos DB dizinleri kullanılarak verimli bir şekilde yürütülür.

Desteklenen JavaScript işlevleri

İşlev Açıklama
chain() ... .value([callback] [, options]) value() ile sonlandırılması gereken zincirlenmiş bir çağrı başlatır.
filter(predicateFunction [, options] [, callback]) Giriş belgelerini sonuçta elde edilen kümede filtrelemek/çıkarmak için true/false döndüren bir koşul işlevi kullanarak girişi filtreler. Bu işlev, SQL'deki WHERE yan tümcesine benzer şekilde davranır.
flatten([isShallow] [, options] [, callback]) Her giriş öğesindeki dizileri tek bir dizide birleştirir ve düzleştirir. Bu işlev LINQ içindeki SelectMany işlevine benzer şekilde davranır.
map(transformationFunction [, options] [, callback]) Her giriş öğesini bir JavaScript nesnesine veya değerine eşleyen bir dönüştürme işlevi verilen projeksiyonu uygular. Bu işlev, SQL'deki select yan tümcesine benzer şekilde davranır.
pluck([propertyName] [, options] [, callback]) Bu işlev, her giriş öğesinden tek bir özelliğin değerini ayıklayan bir eşleme kısayoludur.
sortBy([predicate] [, options] [, callback]) Verilen koşulu kullanarak giriş belgesi akışındaki belgeleri artan düzende sıralayarak yeni bir belge kümesi oluşturur. Bu işlev, SQL'deki ORDER BY yan tümcesine benzer şekilde davranır.
sortByDescending([predicate] [, options] [, callback]) Verilen koşulu kullanarak giriş belgesi akışındaki belgeleri azalan düzende sıralayarak yeni bir belge kümesi oluşturur. Bu işlev, SQL'deki ORDER BY x DESC yan tümcesine benzer şekilde davranır.
unwind(collectionSelector, [resultSelector], [options], [callback]) İç dizi ile kendi kendine birleştirme gerçekleştirir ve sonuç projeksiyonu için her iki taraftan da demet olarak sonuç ekler. Örneğin, bir kişi belgesini person.pets ile birleştirmek [kişi, evcil hayvan] tanımlama grubu üretebilir. Bu, .NET LINQ içindeki SelectMany'ye benzer.

Koşul ve/veya seçici işlevlerine dahil edildiğinde, aşağıdaki JavaScript yapıları doğrudan Azure Cosmos DB dizinlerinde çalışacak şekilde otomatik olarak iyileştirilmiştir:

  • Basit işleçler: = + - * / % | ^ & == != === !== < > <= >= || && << >> >>> ~
  • Nesne değişmez değeri de dahil olmak üzere değişmez değerler: {}
  • var, return

Aşağıdaki JavaScript yapıları Azure Cosmos DB dizinleri için iyileştirilmemiştir:

  • Denetim akışı: if for while
  • İşlev çağrıları

Daha fazla bilgi için bkz . Azure Cosmos DB Sunucu Tarafı JavaScript Belgeleri.

SQL'den JavaScript'e bilgi sayfası

Aşağıdaki tabloda çeşitli SQL sorguları ve buna karşılık gelen JavaScript sorguları yer alır. SQL sorgularda olduğu gibi, özellikler (örneğin, item.id) büyük/küçük harfe duyarlıdır.

Not

__ (çift alt çizgi), JavaScript sorgu API'sini getContext().getCollection() kullanırken kullanılan diğer addır.

SQL JavaScript Sorgu API'si Açıklama
SEÇMEK*
FROM belgeleri
__.map(function(doc) {
    belgeyi iade edin;
});
Tüm belgeleri (devamlılık belirteci ile sayfalandırılmış) olduğu gibi sonuçlanır.
SEÇMEK
   docs.id,
   docs.message AS msg,
   docs.actions
FROM belgeleri
__.map(function(doc) {
    return {
        kimlik: doc.id,
        msg: doc.message,
        actions:doc.actions
    };
});
Kimliği, iletiyi (msg'ye diğer adla) ve eylemi tüm belgelerden projeler.
SEÇMEK*
FROM belgeleri
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Şu koşula sahip belgeler için sorgular: id = "X998_Y998".
SEÇMEK*
FROM belgeleri
WHERE
   ARRAY_CONTAINS(docs. Etiketler, 123)
__.filter(function(x) {
    return x.Tags &&x.Tags.indexOf(123) > -1;
});
Etiketler özelliğine ve Etiketlere sahip belgeler için sorgular, 123 değerini içeren bir dizidir.
SELECT
   docs.id,
   docs.message AS msg
FROM belgeleri
WHERE
   docs.id="X998_Y998"
__.chain()
    .filter(function(doc) {
        return doc.id ==="X998_Y998";
    })
    .map(function(doc) {
       return {
            kimlik: doc.id,
            msg: doc.message
       };
    })
.value();
Koşul, kimlik = "X998_Y998" koşuluna sahip belgeler için sorgular ve ardından kimlik ve iletiyi (msg için diğer adla adlandırılır) projeler.
SELECT VALUE etiketi
FROM belgeleri
JOIN etiketi IN belgeleri. Etiketler
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        belgeyi iade edin. Etiketler & Dizi.isArray(doc. Etiketler);
    })
    .sortBy(function(doc) {
        doc._ts döndür;
    })
    .pluck("Etiketler")
    .flatten()
    .value()
Dizi özelliğine sahip belgeler için filtreler, Etiketler ve sonuçta elde edilen belgeleri _ts zaman damgası sistemi özelliğine göre sıralar ve ardından projeler + Etiketler dizisini düzleştirilir.

Sonraki adımlar

Azure Cosmos DB'de saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri yazma ve kullanma hakkında daha fazla bilgi edinin: