update(...) स्टेज, मौजूदा दस्तावेज़ों को अपडेट करता है.
उदाहरण
उदाहरण के लिए,
नीचे दिया गया ऑपरेशन, डेटा मॉडल में हुए बदलाव को किसी कलेक्शन ग्रुप के सभी दस्तावेज़ों में बैकफ़िल करता है. पाइपलाइन, users कलेक्शन ग्रुप के उन
सभी दस्तावेज़ों में preferences.color फ़ील्ड जोड़ती है जिनमें यह फ़ील्ड मौजूद नहीं है.
Node.js
const snapshot = await db.pipeline() .collectionGroup("users") .where(not(exists(field("preferences.color")))) .addFields(constant(null).as("preferences.color")) .removeFields("color") .update() .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Constant, Field, Not snapshot = ( client.pipeline() .collection_group("users") .where(Not(Field.of("preferences.color").exists())) .add_fields(Constant.of(None).as_("preferences.color")) .remove_fields("color") .update() .execute() )
Java
Pipeline.Snapshot snapshot = firestore.pipeline() .collectionGroup("users") .where(not(exists(field("preferences.color")))) .addFields(constant((String) null).as("preferences.color")) .removeFields("color") .update() .execute().get();
जाएं
snapshot := client.Pipeline(). CollectionGroup("users"). Where(firestore.Not(firestore.FieldExists(firestore.FieldOf("preferences.color")))). AddFields(firestore.Selectables( firestore.ConstantOfNull().As("preferences.color"), )). RemoveFields(firestore.Fields("color")). Update(). Execute(ctx)
व्यवहार
डेटा में बदलाव करने वाली कंप्यूटर प्रोग्राम की भाषा (डीएमएल) के सभी चरण, पाइपलाइन के आखिर में होने चाहिए.
इस चरण में आने वाले दस्तावेज़ों में __name__ फ़ील्ड शामिल होना चाहिए, ताकि यह पता चल सके कि किन दस्तावेज़ों को अपडेट करना है. अगर कोई भी दस्तावेज़ मौजूद नहीं है, तो कार्रवाई पूरी नहीं होगी.
ज़्यादातर इनपुट स्टेज (जैसे कि collection(...),
collection_group(...),
database(...), और
documents(...)) में, डिफ़ॉल्ट रूप से __name__ फ़ील्ड शामिल होता है.
दस्तावेज़ लिखने से पहले, transformations को लागू करने के लिए, आपके पास विकल्प होता है. ये ठीक उसी तरह काम करते हैं जैसे फ़ाइनल आउटपुट स्टेज से ठीक पहले add_fields(...) को जोड़ना. साथ ही, एक्सप्रेशन पिछले दस्तावेज़ों के कॉन्टेक्स्ट में रन होते हैं.
जवाब में, बदले गए दस्तावेज़ों की संख्या के बारे में खास जानकारी शामिल होती है. उदाहरण के लिए, यहां दिए गए जवाब से पुष्टि होती है कि पाइपलाइन ने तीन दस्तावेज़ों में बदलाव किया है:
{documents_modified: 3L}
सीमाएं
डीएमएल स्टेज में Cloud Firestore Security Rules काम नहीं करता. Cloud Firestore Security Rules के ज़रिए DML ऑपरेशन करने की कोशिशों को अस्वीकार कर दिया जाता है.
इस सुविधा की झलक के दौरान, किसी लेन-देन में DML स्टेज नहीं चलाए जा सकते. डेटा में एकरूपता बनाए रखने के बारे में ज़्यादा जानने के लिए, डेटा में एकरूपता लेख पढ़ें.
अगर डीएमएल स्टेज से पहले वाली स्टेज में, एक ही
__name__वाले कई दस्तावेज़ जनरेट होते हैं, तो हर इंस्टेंस को प्रोसेस किया जाता है.update(...)के लिए, इसका मतलब है कि एक ही टारगेट दस्तावेज़ में कई बार बदलाव किया जा सकता है.delete(...)के लिए, पहली कोशिश के बाद की कोशिशें काम नहीं करेंगी.