इसके साथ बदलें

ब्यौरा

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

एक्सप्रेशन, लिटरल मैप या ऐसा एक्सप्रेशन हो सकता है जिसका आकलन मैप के तौर पर किया जाता है. अगर दिया गया एक्सप्रेशन मैप के तौर पर नहीं दिखता है, तो यह स्टेज एक गड़बड़ी दिखाती है.

ये तीन मोड काम करते हैं:

  • full_replace: यह विकल्प, पूरे दस्तावेज़ को दिए गए एक्सप्रेशन के नतीजे से बदल देता है. साथ ही, इसमें वे फ़ील्ड शामिल नहीं होते जो एक्सप्रेशन में नहीं दिखते.
  • merge_overwrite_existing: एक्सप्रेशन को मौजूदा दस्तावेज़ के साथ मर्ज करता है. साथ ही, दस्तावेज़ में मौजूद फ़ील्ड की वैल्यू को एक्सप्रेशन में मौजूद वैल्यू से बदलता है
  • merge_keep_existing: यह एक्सप्रेशन को मौजूदा दस्तावेज़ के साथ मर्ज करता है. साथ ही, सिर्फ़ तब फ़ील्ड वैल्यू जोड़ता है, जब दस्तावेज़ में कोई वैल्यू मौजूद न हो.

उदाहरण

इन दस्तावेज़ों का cities कलेक्शन बनाओ:

Node.js

await db.collection("cities").doc("SF").set({name: "San Francisco", population: 800000, location: {country: "USA", state: "California"}});
await db.collection("cities").doc("TO").set({name: "Toronto", population:  3000000, province: "ON", location: {country: "Canada", province: "Ontario"}});
await db.collection("cities").doc("NY").set({name: "New York", location: {country: "USA", state: "New York"}});
await db.collection("cities").cov("AT").set({name: "Atlantis", population: null});

दस्तावेज़ का बदला हुआ वर्शन पाने के लिए, full_replace मोड का इस्तेमाल करना

नेस्ट किए गए location फ़ील्ड को निकालें और बाकी सभी डेटा को खारिज करें:

Node.js
  const names = await db.pipeline()
    .collection("/cities")
    .replace_with(Field.of("location"), "full_replace")
    .execute();
    
Java
Pipeline.Snapshot names =
    firestore.pipeline().collection("cities").replaceWith(field("location")).execute().get();
जाएं
snapshot := client.Pipeline().
	Collection("cities").
	ReplaceWith(firestore.FieldOf("location")).
	Execute(ctx)

इससे ये दस्तावेज़ जनरेट होते हैं:

{ country: "USA", state: "California" },
{ country: "Canada", province: "Ontario" },
{ country: "USA", state: "New York" },
{ }

फ़ील्ड सेट करने के लिए, merge_overwrite_existing मोड का इस्तेमाल करना

सभी दस्तावेज़ों के population फ़ील्ड को 0 पर सेट करें. इससे मौजूदा वैल्यू बदल जाएंगी:

Node.js
  const censoredResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("population", 0), "merge_overwrite_existing")
    .execute();
    

इससे ये दस्तावेज़ जनरेट होते हैं:

{name: "San Francisco", population: 0, location: {country: "USA", state: "California"}},
{name: "Toronto", population: 0, province: "ON", location: {country: "Canada", province: "Ontario"}},
{name: "New York", population: 0, location: {country: "USA", state: "New York"}},
{name: "Atlantis", population: 0}

डिफ़ॉल्ट वैल्यू जोड़ने के लिए, merge_keep_existing मोड का इस्तेमाल करना

जब किसी दस्तावेज़ में location नहीं दिखता है, तब उसके लिए डिफ़ॉल्ट वैल्यू सेट करना:

Node.js
  const defaultedResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("location", "unknown"), "merge_keep_existing")
    .execute();
    

इससे ये दस्तावेज़ जनरेट होते हैं:

{ name: "San Francisco", population: 800000, location: { country: "USA", state: "California" } },
{ name: "Toronto", province: "ON", population: 3000000, location: { country: "Canada", province: "Ontario" } },
{ name: "New York", location: { country: "USA", state: "New York" } },
{ name: "Atlantis", population: null, location: "unknown" }