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

mongoDB :Membuat ObjectId Untuk Setiap Anak Baru yang Ditambahkan Ke Bidang Array

Bukan mongodb ahli tetapi, jika saya memahami Anda dengan benar, Anda ingin bidang _id dari subdokumen dimasukkan secara otomatis.

Saya membuat threads db lalu masukkan message pertama di message koleksi menggunakan perintah berikut:

db.messages.insert({messages:[{_id:ObjectId(), message:"Message 1."}]}); 

Perhatikan _id:ObjectId() bidang. Hasilnya adalah sebagai berikut:

Sekarang saya memiliki ObjectId(56...) , saya dapat memperbarui catatan tertentu dan menyisipkan lebih banyak pesan ke dalamnya. Dan perintahnya adalah sebagai berikut:

db.messages.update({"_id":ObjectId("56...")}, 
{$push:{messages:{_id:ObjectId(), message:"I am message 2."}}});

Dan di atas akan menyisipkan pesan baru dalam koleksi. Lihat tangkapan layar di bawah ini:

dan akhirnya setelah beberapa pembaruan, koleksinya terlihat sebagai berikut:

Semua bidang _id di messages array dibuat secara otomatis.

Mungkin bukan ide yang baik untuk menggunakan _id lapangan karena berbagai alasan. Silakan Google untuk detail lebih lanjut tentang apakah akan menggunakan _id sebagai kunci untuk subdokumen atau tidak.

Saya menggunakan MongoDB shell versi 3.0.6 untuk perintah.

EDIT 28-01-2016 16:09

Karena solusi di atas didasarkan pada shell MongoDB, saya memutuskan untuk melakukan tes lain menggunakan driver Node.js untuk MongoDB. Pertama-tama, saya mendeklarasikan variabel ObjectID sebagai berikut

var ObjectID = require('mongodb').ObjectID;

Saya akan menggunakan ObjectID dengan id dokumen utas tempat pesan harus dimasukkan sebagai berikut dalam update saya dan findOneAndUpdate panggilan fungsi

app.get('/insertNewMessage', function(req, res) {
    db.collection("messages").findOneAndUpdate({
        _id: new ObjectID('56aa3554e90911b64c36a424')
    }, {
        $push: {
            messages: {
                _id: new ObjectID(),
                message: "From NodeJS with <3 using findOneAndUpdate.Bye."
            }
        }
    }, function(err, result) {
        if (err)
            res.json(err);
        else
            res.json(result);
    });
});

Diuji keduanya dan berfungsi dengan baik. Lihat tangkapan layar di bawah ini:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mencantumkan pesan terakhir dari setiap percakapan, yang melibatkan pengguna, di MongoDB

  2. $proyek di $lookup mongodb

  3. Bagaimana cara mengganti string di semua dokumen di Mongo

  4. MongoDB $abs

  5. MongoDB - Buat Cadangan