Açıklama
Önceki aşamanın sonuçlarından deterministik olmayan bir örnek döndürür.
Desteklenen iki mod vardır:
documents: Rastgelenbelge seçin.percent: Belgelerinnyüzdesini rastgele seçin.
Örnekler
Web
let results; // Get a sample of 100 documents in a database results = await execute(db.pipeline() .database() .sample(100) ); // Randomly shuffle a list of 3 documents results = await execute(db.pipeline() .documents([ doc(db, "cities", "SF"), doc(db, "cities", "NY"), doc(db, "cities", "DC"), ]) .sample(3) );
Swift
var results: Pipeline.Snapshot // Get a sample of 100 documents in a database results = try await db.pipeline() .database() .sample(count: 100) .execute() // Randomly shuffle a list of 3 documents results = try await db.pipeline() .documents([ db.collection("cities").document("SF"), db.collection("cities").document("NY"), db.collection("cities").document("DC"), ]) .sample(count: 3) .execute()
Kotlin
var results: Task<Pipeline.Snapshot> // Get a sample of 100 documents in a database results = db.pipeline() .database() .sample(100) .execute() // Randomly shuffle a list of 3 documents results = db.pipeline() .documents( db.collection("cities").document("SF"), db.collection("cities").document("NY"), db.collection("cities").document("DC") ) .sample(3) .execute()
Java
Task<Pipeline.Snapshot> results; // Get a sample of 100 documents in a database results = db.pipeline() .database() .sample(100) .execute(); // Randomly shuffle a list of 3 documents results = db.pipeline() .documents( db.collection("cities").document("SF"), db.collection("cities").document("NY"), db.collection("cities").document("DC") ) .sample(3) .execute();
Python
# Get a sample of 100 documents in a database results = client.pipeline().database().sample(100).execute() # Randomly shuffle a list of 3 documents results = ( client.pipeline() .documents( client.collection("cities").document("SF"), client.collection("cities").document("NY"), client.collection("cities").document("DC"), ) .sample(3) .execute() )
Java
// Get a sample of 100 documents in a database Pipeline.Snapshot results1 = firestore.pipeline().database().sample(100).execute().get(); // Randomly shuffle a list of 3 documents Pipeline.Snapshot results2 = firestore .pipeline() .documents( firestore.collection("cities").document("SF"), firestore.collection("cities").document("NY"), firestore.collection("cities").document("DC")) .sample(3) .execute() .get();
Go
// Get a sample of 100 documents in a database results1, err := client.Pipeline().Database().Sample(firestore.WithDocLimit(100)).Execute(ctx).Results().GetAll() if err != nil { fmt.Fprintf(w, "GetAll failed: %v", err) return err } // Randomly shuffle a list of 3 documents results2, err := client.Pipeline(). Documents([]*firestore.DocumentRef{ client.Collection("cities").Doc("SF"), client.Collection("cities").Doc("NY"), client.Collection("cities").Doc("DC"), }). Sample(firestore.WithDocLimit(3)). Execute(ctx).Results().GetAll() if err != nil { fmt.Fprintf(w, "GetAll failed: %v", err) return err }
Modlar
Belgeler Modu
documents modu, girişinden rastgele n belge seçer. Burada her belgenin (belgelerin sırasıyla birlikte) seçilme olasılığı eşittir. Bunu yapmak için Cloud Firestore tüm belgeleri taramaya ve işlemeye devam etmelidir. Bu nedenle, bu işlem yine de pahalı olabilir.
Örneğin, aşağıdaki koleksiyon için:
Node.js
await db.collection("cities").doc("SF").set({name: "San Francsico", state: "California"});
await db.collection("cities").doc("NYC").set({name: "New York City", state: "New York"});
await db.collection("cities").doc("CHI").set({name: "Chicago", state: "Illinois"});
Belge modundaki örnekleme aşaması, bu koleksiyondaki sonuçların deterministik olmayan bir alt kümesini almak için kullanılabilir.
Node.js
const sampled = await db.pipeline()
.collection("/cities")
.sample(1)
.execute();
Bu örnekte, yalnızca rastgele 1 belge döndürülür.
{ name: "New York City", state: "New York" }
Sağlanan sayı, döndürülen toplam belge sayısından büyükse tüm belgeler rastgele bir sırayla döndürülür.
Node.js
const sampled = await db.pipeline()
.collection("/cities")
.sample(5)
.execute();
Bu işlem sonucunda aşağıdaki belgeler oluşturulur:
{ name: "New York City", state: "New York" }
{ name: "Chicago", state: "Illinois" }
{ name: "San Francisco", state: "California" }
Yüzde Modu
percent modu, girişindeki tüm belgelerin n yüzdesini seçmeye çalışır.
Bu durumda aşamada yaklaşık # documents * percent / 100 belge üretilir. documents modunda olduğu gibi, Cloud Firestore modu da her belgenin eşit olasılıkla döndürülmesini sağlar. Bu işlem için Cloud Firestore, tüm dokümanları tarayıp işlemesi gerektiğinden sonuç kümesi küçük olsa bile pahalı bir işlem olabilir.
documents modunun aksine, buradaki sıralama rastgele değildir ve mevcut doküman sırasını korur. Bu yüzde girişi, 0.0 ile 1.0 arasında bir çift değer olmalıdır.
Örneğin, aşağıdaki koleksiyon için:
Node.js
await db.collection("cities").doc("SF").set({name: "San Francsico", state: "California"});
await db.collection("cities").doc("NYC").set({name: "New York City", state: "New York"});
await db.collection("cities").doc("CHI").set({name: "Chicago", state: "Illinois"});
await db.collection("cities").doc("ATL").set({name: "Atlanta", state: "Georgia"});
Yüzde modundaki örnek aşaması, collection(...) aşamasındaki dokümanların (ortalama olarak) %50'sini almak için kullanılabilir.
Node.js
const sampled = await db.pipeline()
.collection("/cities")
.sample({ percent: 0.5 })
.execute();
Bu işlem, cities koleksiyonundaki dokümanların (ortalama) %50'sinin belirlenimci olmayan bir örneğini oluşturur. Aşağıda olası bir çıkış verilmiştir.
{ name: "New York City", state: "New York" }
{ name: "Chicago", state: "Illinois" }
Yüzde modunda, her belgenin seçilme olasılığı aynı olduğundan hiçbir belgenin veya tüm belgelerin döndürülmesi mümkündür.
Müşteri örnekleri
Web
// Get a sample of on average 50% of the documents in the database const results = await execute(db.pipeline() .database() .sample({ percentage: 0.5 }) );
Swift
// Get a sample of on average 50% of the documents in the database let results = try await db.pipeline() .database() .sample(percentage: 0.5) .execute()
Kotlin
// Get a sample of on average 50% of the documents in the database val results = db.pipeline() .database() .sample(SampleStage.withPercentage(0.5)) .execute()
Java
// Get a sample of on average 50% of the documents in the database Task<Pipeline.Snapshot> results = db.pipeline() .database() .sample(SampleStage.withPercentage(0.5)) .execute();
Python
from google.cloud.firestore_v1.pipeline_stages import SampleOptions # Get a sample of on average 50% of the documents in the database results = ( client.pipeline().database().sample(SampleOptions.percentage(0.5)).execute() )
Java
// Get a sample of on average 50% of the documents in the database Pipeline.Snapshot results = firestore.pipeline().database().sample(Sample.withPercentage(0.5)).execute().get();
Go
// Get a sample of on average 50% of the documents in the database snapshot := client.Pipeline(). Database(). Sample(firestore.WithPercentage(0.5)). Execute(ctx)