MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Memperbarui daftar dokumen yang disematkan di mongoengine

Tidak dengan bidang daftar, Anda tidak dapat melakukan penyisipan ke dalam daftar dalam satu kueri. $addToSet tidak akan berfungsi karena Anda telah mengubah post jadi kamu tidak bisa menandingi. Anda dapat mengkodekan hal ini tetapi ini menciptakan kondisi balapan di mana ada sedikit peluang untuk kesalahan, misalnya:

    class Post(EmbeddedDocument):
        uid = StringField(required=True)
        text = StringField(required=True)

    class Feed(Document):
        label = StringField(required=True)
        feed_url = StringField(required=True)
        posts = ListField(EmbeddedDocumentField(Post))

    Feed.drop_collection()

    Feed(
        label="label",
        feed_url="www.feed.com"
    ).save()

    post = Post(uid='1', text="hi")
    updated = Feed.objects(posts__uid=post.uid).update_one(set__posts__S=post)
    if not updated:
        Feed.objects.update_one(push__posts=post)

Pertama kami mencoba memperbarui dan jika tidak ada, kami mendorong ke daftar - ini adalah di mana ada jendela peluang untuk proses lain untuk berjalan dan berpotensi mendorong post dalam daftar.

Risikonya mungkin dapat diterima tetapi secara realistis, saya pikir mengubah skema Anda lebih baik, berpotensi memecah Post keluar menjadi koleksinya sendiri. Kemudian Anda dapat menggunakan pernyataan pembaruan dan mengatur seluruh objek. Biayanya akan menjadi kueri tambahan untuk mendapatkan data umpan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menggunakan objek Javascript di dalam pipa agregasi mongodb?

  2. Sekarang Tersedia:Instans MongoDB yang Dihosting Sepenuhnya di AWS

  3. Bagaimana saya bisa menghapus catatan lama dari koleksi di MongoDB?

  4. Pilih catatan N terakhir dari MongoDB menggunakan node.js

  5. mongodb $addToSet ke bidang non-array saat memperbarui pada upsert