मैं mongoDB में न तो ReactiveMongo का विशेषज्ञ हूं, लेकिन ऐसा लगता है कि आप एक NoSQL डेटाबेस का उसी तरह उपयोग करने का प्रयास कर रहे हैं जैसे आप मानक SQL डेटाबेस का उपयोग करते हैं। ध्यान दें कि mongoDB अतुल्यकालिक है जिसका अर्थ है कि कुछ भविष्य में संचालन निष्पादित किया जा सकता है, यही कारण है कि सम्मिलन/अद्यतन संचालन प्रभावित दस्तावेज़ों को वापस नहीं करता है। आपके प्रश्नों के संबंध में:
आपको शायद mongoDB db.collection.update() को देखना चाहिए।
विधि और इसे upsert
. के साथ कॉल करें पैरामीटर सत्य के रूप में। यदि आप इसे वहन कर सकते हैं, तो यह या तो दस्तावेज़ों को अद्यतन करेगा यदि वे डेटाबेस में पहले से मौजूद हैं या उन्हें अन्यथा सम्मिलित करें। फिर से, यह कार्रवाई प्रभावित दस्तावेज़ों को वापस नहीं करती है, लेकिन अंतिम त्रुटि
. देखें reactivemongo.api.collections.GenericCollection#updateए> जो एक Future[LastError]
returns लौटाता है ।
एक बार फिर, सम्मिलित/अपडेट किए गए दस्तावेज़ वापस नहीं किए जाएंगे। यदि आपको वास्तव में पूरे प्रभावित दस्तावेज़ को वापस करने की आवश्यकता है, तो आपको मेल खाने वाले दस्तावेज़ों को पुनः प्राप्त करने के लिए एक और क्वेरी करने की आवश्यकता होगी।
मैं शायद आपके कोड को इस तरह फिर से लिखूंगा (बिना त्रुटि/विफलता प्रबंधन के):
def dostuff() = Action {
implicit request =>
form.bindFromRequest.fold(
errors => BadRequest(views.html.invite(errors)),
form => {
val objectsReadyForSave = createObjects(form.companyId, form.companyName, sms_pattern.findAllIn(form.phoneNumbers).toSet)
Async {
val operations = for {
data <- objectsReadyForSave
} yield collection.update(BSONDocument("cId" -> data.cId.get, "userId" -> data.userId.get), data, upsert = true)
Future.sequence(operations).map {
lastErrors =>
Ok("Documents probably inserted/updated!")
}
}
}
)
}
स्काला फ्यूचर्स भी देखें:http://docs.scala-lang.org/ सिंहावलोकन/core/futures.html
यह वास्तव में उपयोगी है!;)