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

Cara mengembalikan subdokumen dari objek dalam array dengan Meteor dan MongoDB

! TERSELESAIKAN!

Masalahnya di sini adalah saya tidak mengetahui apa paket aldeed:collection2 lakukan untuk kode saya. Saya menambahkan paket ini untuk menggunakan OrionJS (inilah halaman github ). Dan saya tidak menyadari bahwa aldeed:collection2 ini memaksa validasi pada semua pembaruan saya. Saya mengalami ini sebelumnya, tetapi itu memberi saya kesalahan. Di masa lalu saya bisa melacak kesalahan ke bawah. Kali ini, tidak ada kesalahan di mana saja. Itu akan memperbarui array, tetapi dengan objek kosong. Sangat membingungkan. Saya akan memposting masalah di aldeed:collection2 halaman proyek.

Dari dokumentasi proyek :"[aldeed:collection2 adalah] paket Meteor yang memungkinkan Anda untuk melampirkan skema ke Mongo.Collection. Otomatis memvalidasi skema tersebut saat menyisipkan dan memperbarui dari kode klien atau server."

dokumentasi untuk koreksinya bisa dilihat di sini .

Solusi:

Karena saya menggunakan aldeed:simple-schema dan aldeed:collection2 Saya perlu memastikan untuk melampirkan "Skema" yang tepat ke koleksi saya.

Suka Jadi:

Ideas.attachSchema(new SimpleSchema({
  // ... a bunch of other schema data

  // I was missing this:
  score: {
    type: [Object],
    optional: true,
    label: 'Score',
  },
  "score.$.userId": {
    type: String,
    optional: true,
    label: 'Score'
  },
  "score.$.score": {
    type: String,
    optional: true,
    label: 'Score'
  }

  // ... a bunch more schema data
});

Pemecahan masalah:

Bagaimana saya mengetahuinya?

Yah, saya baru mengenal MongoDB - jadi saya enggan pergi ke konsol dan hanya mencoba melakukan pembaruan dari sana. Bahkan, ini tidak terpikir oleh saya sampai saya berbicara dengan istri saya.

Saya mencoba segalanya, menambahkan tanda kutip di sekitar semuanya , melihat kode orang lain. Saya memeriksa semua dokumentasi MongoDB yang luar biasa. Saya melihat video youtube. Saya melihat solusi stackoverflow.com lainnya. Akhirnya terpikir oleh saya bahwa kode orang lain terlihat persis seperti kode saya, dan ini seharusnya BEKERJA. Saya bahkan mendaftar di Clarity.fm untuk mengajukan pertanyaan dari Sacha Greif untuk $1 per menit.

... Saya mulai berpikir bahwa database mongo saya tidak berfungsi. Mungkin mongo saya instal rusak?

Nah, ini ada ujiannya... Setelah dua hari siksaan ini akhirnya datang ke saya - Coba saja update di mongo console... (duh)

meteor:PRIMARY> db.ideas.update({_id:"DqEGjK3xSTBdpEgXa"}, {$addToSet: {score: {userId: "123456", score: 1}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
meteor:PRIMARY> db.ideas.find()
{
  "_id" : "DqEGjK3xSTBdpEgXa",
  "title" : "Revive Randolf With Bloodmagic",
  "body" : "Bring Randolf back from the dead using witche's bloodmagic.",
  "userId" : "Rz28ByKYM4Y8futFb",
  "author" : "Iryna Iglehart",
  "episodeId" : "iQaxyLPi5iaYtQngf",
  "timestamp" : ISODate("2016-06-08T17:37:57.237Z"),
  "score" : [
    {
      "userId" : "123456",
      "score" : 1
    }
  ],
  "overallScore" : 0,
  "votedOnBy" : [ ],
  "timesVotedOn" : 0
}

Setelah saya tahu bahwa mongo BISA melakukan pembaruan saya - saya tahu masalahnya pasti dengan pengaturan meteor saya. Saya akan menemukan masalah pada meteor sekarang jika ini adalah masalah. Saya mencari di setiap sudut gelap google mencoba mencari tahu yang satu ini.

Tidak lama sebelum saya ingat saya mengalami aneh masalah validasi sebelumnya. Kecuali masalah validasi ini selalu disertai kesalahan. Fakta bahwa tidak ada kesalahan dan array hanya diperbarui dengan objek kosong benar-benar membuat saya bingung.

Apa yang Saya Pelajari:

  1. Jika pada awalnya meteor gagal, coba konsol mongo...
  2. Sesuai dengan @David Weldon 's comment - teknik debugging bagus lainnya yang akan membantu saya, yang bisa saya coba sejak lama adalah memulai proyek meteor baru dan menguji kode saya di luar sana, lalu tambahkan paket satu per satu dan lihat kapan/jika salah satu dari mereka melanggar kode. Tes ini akan menunjukkan bahwa pada dasarnya kode itu benar, dan hanya membutuhkan skema terlampir karena paket tambahan.
  3. Jangan menambahkan paket secara membabi buta. Pahami jika/kapan paket mengubah alur pengembangan seperti aldeed:collection2

Terima kasih:

TERIMA KASIH BANYAK kepada @Michel Floyd dan @David Weldon atas semua bantuan Anda dalam masalah ini.

Tautan Penting:

  1. Saya belajar sedikit dari kesalahan umum ditulis oleh @David Weldon
  2. Dokumentasi untuk aldeed:collection2
  3. Dokumentasi untuk aldeed:simple-schema
  4. Telusuri "Menemukan Data" di tutorial meteor ini - ini berbicara tentang fetch() dan bagaimana itu membantu. Ini membantu saya selama pemecahan masalah saya pada masalah ini.
  5. Meninjau dokumentasi tentang pembaruan dari MongoDB
  6. Dokumentasi $addToSet MongoDB
  7. Dokumentasi $push MongoDB
  8. [Koleksi Contoh Bios MongoDB](https://docs .mongodb.com/manual/reference/bios-example-collection/] - Setelah melihat dokumen seperti ini, saya benar-benar menemukan bahwa tidak ada yang salah dengan desain database saya, HARUS ada cara untuk melakukan ini selama ini (dan tentu saja ada)

Pertanyaan Terkait:

[Terpecahkan] Cara Memperbarui Array Subdokumen pada Koleksi MongoDB di MeteorJS




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:mencoba membaca Long dari JSON menyebabkan java.lang.Integer tidak dapat dilemparkan ke java.lang.Long

  2. perbarui beberapa elemen dalam array mongodb

  3. luwak menemukan semua tidak mengirim panggilan balik

  4. findAll gagal setelah play morphia diinisialisasi ulang

  5. Pencarian Data Musim Semi MongoDB dengan Agregasi Pipeline