Union

ब्यौरा

यह फ़ंक्शन, किसी दूसरी पाइपलाइन के दस्तावेज़ों को मौजूदा पाइपलाइन के दस्तावेज़ों के साथ मर्ज करता है.

उदाहरण

Node.js
  const results = await db.pipeline()
    .collection("cities/SF/restaurants")
    .where(eq("type", "chinese"))
    .union(db.pipeline()
      .collection("cities/NYC/restaurants")
      .where(eq("type", "italian")))
    .where(gte("rating", 4.5))
    .execute();
    

Web

const results = await execute(db.pipeline()
  .collection("cities/SF/restaurants")
  .where(field("type").equal("Chinese"))
  .union(db.pipeline()
    .collection("cities/NY/restaurants")
    .where(field("type").equal("Italian")))
  .where(field("rating").greaterThanOrEqual(4.5))
  .sort(field("__name__").descending())
);
Swift
let results = try await db.pipeline()
  .collection("cities/SF/restaurants")
  .where(Field("type").equal("Chinese"))
  .union(with: db.pipeline()
    .collection("cities/NY/restaurants")
    .where(Field("type").equal("Italian")))
  .where(Field("rating").greaterThanOrEqual(4.5))
  .sort([Field("__name__").descending()])
  .execute()

Kotlin

val results = db.pipeline()
    .collection("cities/SF/restaurants")
    .where(field("type").equal("Chinese"))
    .union(db.pipeline()
        .collection("cities/NY/restaurants")
        .where(field("type").equal("Italian")))
    .where(field("rating").greaterThanOrEqual(4.5))
    .sort(field("__name__").descending())
    .execute()

Java

Task<Pipeline.Snapshot> results = db.pipeline()
    .collection("cities/SF/restaurants")
    .where(field("type").equal("Chinese"))
    .union(db.pipeline()
        .collection("cities/NY/restaurants")
        .where(field("type").equal("Italian")))
    .where(field("rating").greaterThanOrEqual(4.5))
    .sort(field("__name__").descending())
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

results = (
    client.pipeline()
    .collection("cities/SF/restaurants")
    .where(Field.of("type").equal("Chinese"))
    .union(
        client.pipeline()
        .collection("cities/NY/restaurants")
        .where(Field.of("type").equal("Italian"))
    )
    .where(Field.of("rating").greater_than_or_equal(4.5))
    .sort(Field.of("__name__").descending())
    .execute()
)
Java
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collection("cities/SF/restaurants")
        .where(field("type").equal("Chinese"))
        .union(
            firestore
                .pipeline()
                .collection("cities/NY/restaurants")
                .where(field("type").equal("Italian")))
        .where(field("rating").greaterThanOrEqual(4.5))
        .sort(descending(field("__name__")))
        .execute()
        .get();
जाएं
snapshot := client.Pipeline().
	Collection("cities/SF/restaurants").
	Where(firestore.FieldOf("type").Equal("Chinese")).
	Union(
		client.Pipeline().
			Collection("cities/NY/restaurants").
			Where(firestore.FieldOf("type").Equal("Italian")),
	).
	Where(firestore.FieldOf("rating").GreaterThanOrEqual(4.5)).
	Sort(firestore.Orders(firestore.Descending(firestore.FieldOf("__name__")))).
	Execute(ctx)

व्यवहार

इस स्टेज में, कई पाइपलाइन एक साथ चलती हैं और उनके नतीजों को एक साथ जोड़ दिया जाता है.

नतीजों का क्रम तय न होना

दोनों पाइपलाइन के नतीजों को जिस क्रम में जोड़ा जाता है वह तय नहीं होता. किसी भी क्रम को स्थिर नहीं माना जाता है. इसलिए, इस पर भरोसा नहीं किया जाना चाहिए. अगर स्टेबल ऑर्डर की ज़रूरत है, तो sort(...) स्टेज को जोड़ा जा सकता है.

Node.js
  const results = await db.pipeline()
    .collection("cities/SF/restaurants")
    .where(eq("type", "chinese"))
    .union(db.pipeline()
      .collection("cities/NYC/restaurants")
      .where(eq("type", "italian")))
    .where(gte("rating", 4.5))
    .sort(Field.of("__name__"))
    .execute();
    

Kotlin

val results = db.pipeline()
    .collection("cities/SF/restaurants")
    .where(field("type").equal("Chinese"))
    .union(db.pipeline()
        .collection("cities/NY/restaurants")
        .where(field("type").equal("Italian")))
    .where(field("rating").greaterThanOrEqual(4.5))
    .sort(field("__name__").descending())
    .execute()

Java

Task<Pipeline.Snapshot> results = db.pipeline()
    .collection("cities/SF/restaurants")
    .where(field("type").equal("Chinese"))
    .union(db.pipeline()
        .collection("cities/NY/restaurants")
        .where(field("type").equal("Italian")))
    .where(field("rating").greaterThanOrEqual(4.5))
    .sort(field("__name__").descending())
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

results = (
    client.pipeline()
    .collection("cities/SF/restaurants")
    .where(Field.of("type").equal("Chinese"))
    .union(
        client.pipeline()
        .collection("cities/NY/restaurants")
        .where(Field.of("type").equal("Italian"))
    )
    .where(Field.of("rating").greater_than_or_equal(4.5))
    .sort(Field.of("__name__").descending())
    .execute()
)
Java
Pipeline.Snapshot results =
    firestore
        .pipeline()
        .collection("cities/SF/restaurants")
        .where(field("type").equal("Chinese"))
        .union(
            firestore
                .pipeline()
                .collection("cities/NY/restaurants")
                .where(field("type").equal("Italian")))
        .where(field("rating").greaterThanOrEqual(4.5))
        .sort(descending(field("__name__")))
        .execute()
        .get();
जाएं
snapshot := client.Pipeline().
	Collection("cities/SF/restaurants").
	Where(firestore.FieldOf("type").Equal("Chinese")).
	Union(
		client.Pipeline().
			Collection("cities/NY/restaurants").
			Where(firestore.FieldOf("type").Equal("Italian")),
	).
	Where(firestore.FieldOf("rating").GreaterThanOrEqual(4.5)).
	Sort(firestore.Orders(firestore.Descending(firestore.FieldOf("__name__")))).
	Execute(ctx)

डुप्लीकेट नतीजे

union(...) स्टेज में, डुप्लीकेट नतीजों को नहीं हटाया जाता. डुप्लीकेट नतीजे हटाने के लिए, distinct(...) या aggregate(...) स्टेज जोड़ा जा सकता है.