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

Perbarui array menggunakan MongoDB

Metode save() gagal karena mencoba memasukkan dokumen berikut ke dalam koleksi:{"$push":{"resources":[a list of resources]}}, dan "$push" bukan kunci yang valid nama.

Dari pertanyaan Anda, tampaknya Anda mencoba menambahkan dokumen sumber daya lain ke daftar dokumen tersemat, "sumber daya", di dalam dokumen tersemat yang cocok {"itemID" :"1"}, di dalam "itemList". Apakah ini benar?

Berurusan dengan lapisan dokumen yang disematkan itu rumit, tetapi bisa dilakukan:
Berikut adalah bagaimana dokumen berikut dapat dimasukkan ke dalam daftar "sumber daya" menggunakan shell JS:

> var docToInsert = { "resourceID" : "3", "resourceName" : "Foo Test3"}
> db.myCollection.update({_id:"1", "itemList.itemID":"1"}, {"$push":{"itemList.$.resources":docToInsert}})
> db.myCollection.find().pretty()
{
    "_class" : "com.model.Test",
    "_id" : "1",
    "itemList" : [
        {
            "itemID" : "1",
            "itemName" : "Foo",
            "resources" : [
                {
                    "resourceID" : "1",
                    "resourceName" : "Foo Test1"
                },
                {
                    "resourceID" : "2",
                    "resourceName" : "Foo Test2"
                },
                {
                    "resourceID" : "3",
                    "resourceName" : "Foo Test3"
                }
            ]
        }
    ]
}
> 

Dokumentasi tentang penggunaan operator posisi "$" untuk memperbarui dokumen yang disematkan dapat ditemukan di dokumentasi "Memperbarui":http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

Dokumentasi pada pengubah "$push" juga ada di halaman "Memperbarui":http://www.mongodb.org/display/DOCS/Updating#Updating-%24push

Dari kode yang diposting, tampak seolah-olah "sumber daya" adalah daftar. Mungkin metode yang perlu Anda gunakan adalah $pushAll, digunakan untuk menambahkan beberapa nilai ke daftar:http://www.mongodb.org/display/DOCS/Updating#Updating-%24pushAll

Menggunakan driver Java, penyisipan di atas dapat dilakukan seperti ini:

Mongo m = new Mongo("localhost", 27017);
DB db = m.getDB("test");
DBCollection myColl = db.getCollection("myCollection");

BasicDBObject docToInsert = new BasicDBObject("resourceID", "3");
docToInsert.put("resourceName", "Foo Test3");

BasicDBObject updateQuery = new BasicDBObject("_id", "1");
updateQuery.put("itemList.itemID", "1");

BasicDBObject updateCommand = new BasicDBObject("$push", new BasicDBObject("itemList.$.resources", docToInsert));

myColl.update(updateQuery, updateCommand);
System.out.println(myColl.findOne().toString());

Output di atas sebagai berikut:

{ "_class" : "com.model.Test" , "_id" : "1" , "itemList" : [ { "itemID" : "1" , "itemName" : "Foo" , "resources" : [ { "resourceID" : "1" , "resourceName" : "Foo Test1"} , { "resourceID" : "2" , "resourceName" : "Foo Test2"} , { "resourceID" : "3" , "resourceName" : "Foo Test3"}]}]}

Semoga di atas akan meningkatkan pemahaman Anda tentang cara memperbarui dokumen yang disematkan bekerja dengan Mongo menggunakan driver Java. Saya perhatikan bahwa pertanyaan ini juga terkait dengan Spring ("mongoOperations" adalah kelas dari paket Spring), yang sayangnya tidak saya kenal. Jika Anda masih mengalami masalah dengan pembaruan Anda, mungkin anggota Komunitas lain yang lebih akrab dengan Spring akan dapat membantu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sistem penyimpanan khusus untuk GridFS (MongoDB)?

  2. mongodb proyek agregasi objectId dengan concat

  3. Bagaimana cara mengimpor Mongodb ObjectId dari file CSV menggunakan mongoimport?

  4. cara memasukkan nomor peningkatan otomatis dengan koleksi luwak saya

  5. Metode 'statis' luwak vs. metode 'contoh'