Petakan MongoDB _id menggunakan plugin Play-Reactivemongo?

Saya mencoba menggunakan plugin Play-ReactiveMongo untuk membaca/menulis catatan sederhana di MongoDB dengan Play dan Angular. Plugin ini sepertinya merupakan pilihan yang bagus karena memungkinkan Anda menggunakan kelas kasus sederhana dan JSON biasa alih-alih secara eksplisit mengkonversi antara BSON dan JSON. Namun beberapa contoh penggunaan plugin tampaknya tidak mencakup cara memetakan ID Objek MongoDB ke/dari JSON dalam kerangka yang sama. Ini semua tampaknya berfungsi dengan banyak pembacaan/penulisan implisit (= ajaib bagi saya) di latar belakang, tetapi tampaknya tidak menangani ID Objek.

Kode saya didasarkan pada Template Web Modern Alex Lashford, dan sangat mirip dengan Contoh Stephan Godbillion menggunakan JSON Read/Writes, tetapi baik Alex maupun Stephan tidak menunjukkan hubungannya dengan ID objek MongoDB.

Saya memerlukan semacam ID unik untuk catatan data saya, sehingga saya dapat mengambil dan memperbaruinya dll, dan masuk akal untuk menggunakan yang disediakan MongoDB, tetapi sepertinya saya tidak dapat menemukan cara untuk menggunakannya dengan bersih di dalam Play ReactiveMongo plugin.

Adakah yang tahu contoh yang menunjukkan cara menggunakan plugin Play ReactiveMongo dengan koleksi JSON dan beberapa cara memetakan ID Objek ke/dari JSON tanpa harus mengubah semua pemrosesan saya untuk menggunakan BSON?


person Chris Webster    schedule 10.11.2014    source sumber
comment
Jika memungkinkan Anda menggunakan scala salat, mereka memiliki dokumentasi yang bagus tentang mongo dan scala dan mudah diintegrasikan dengan play github.com/ leon/bermain-salat   -  person Yogesh    schedule 10.11.2014
comment
Terima kasih, Yogesh. Salat mungkin bisa menjadi pilihan, tapi itu mengharuskan saya mengerjakan ulang kode yang ada dan tetap menerapkan banyak kode pemetaan. Plugin Play ReactiveMongo sepertinya sudah memberi saya 90% dari apa yang saya butuhkan, kecuali untuk ID Objek. Jika saya perlu menerapkan pemetaan eksplisit untuk ID Objek, itu mungkin masih lebih mudah daripada beralih ke Casbah/Salat. Saya hanya perlu mencari tahu cara melakukan ini.   -  person Chris Webster    schedule 10.11.2014


Jawaban (2)


Saya telah memecahkan masalah ini dengan membuat kelas case lain:

case class Id($oid: String)

lalu gunakan sebagai berikut:

case class User(_id: Id, ...)

Anda harus mengimpor konverter JSON

implicit val idFormat = Json.format[Id]
implicit val userFormat = Json.format[User]
person kurochenko    schedule 30.06.2015

Saya tidak tahu mengapa tim reactivemongo memutuskan untuk memiliki ObjectId di BSON, tetapi tidak di JSON. Bagaimanapun, Anda dapat membuat representasi json dari ObjectId MongoDB sebagai berikut:

import play.api.libs.json._
def objectId(id: String) = Json.obj("$oid" -> id)
yourCollection.find(Json.obj("_id" -> objectId(id))).cursor()...
person David Portabella    schedule 16.08.2016