Aracılığıyla paylaş


Azure Cosmos DB'de JavaScript sorgu API'si

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

Function 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ç kümesine dahil etmek/çıkarmak için true/false döndüren bir predikat fonksiyonu 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]) İç dizinin kendi içindeki elemanlarıyla birleştirme gerçekleştirir ve her iki taraftan da çıkan sonuçları demetler halinde sonuç çıktısına ekler. Örneğin, bir kişi belgesini person.pets ile birleştirmek [kişi, evcil hayvan] ikilileri ü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ışı: ifforwhile
  • İşlev çağrıları

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

SQL'den JavaScript'e el kılavuzu

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.

Uyarı

__ (ç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ÇİN*
FROM belgeleri
__.map(function(doc) {
    belgeyi iade edin;
});
Tüm belgeler, devamlılık belirteci ile sayfalandırılmış şekilde olduğu gibi gösterilir.
SEÇİN
   docs.id,
   docs.message AS msg,
   belgeler.işlemler
FROM belgeleri
__.map(function(doc) {
    return {
        ID: doc.id
        msg: doc.message,
        actions:doc.actions
    };
});
Tüm belgelerdeki kimliği, iletisini (msg olarak) ve eylemi projeksiyon yapar.
SEÇİN*
FROM belgeleri
WHERE
   docs.id="X998_Y998"
__.filter(function(doc) {
    return doc.id ==="X998_Y998";
});
Belirtilen koşula sahip belgeler için sorgular: id = "X998_Y998".
SEÇİN*
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 {
            ID: doc.id
            msg: doc.message
       };
    })
.value();
Kimlik = "X998_Y998" koşuluna sahip belgeler için sorgular yapılır ve ardından kimlik ve ileti (msg olarak adlandırılır) projelendirilir.
SELECT VALUE etiketi
FROM belgeleri
JOIN etiketi IN belgeleri. Etiketler
ORDER BY docs._ts
__.chain()
    .filter(function(doc) {
        return doc.Etiketler && Array.isArray(doc.Etiketler);
    })
    .sortBy(function(doc) {
        doc._ts döndür;
    })
    .pluck("Etiketler")
    .flatten()
    .value()
Dizi özelliği olan belgeler için filtre uygular, Etiketler ve elde edilen belgeleri _ts zaman damgası sistem özelliğine göre sıralar ve ardından Etiketler dizisini projelendirir ve düzleştirir.

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: