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

Meteor - Kesalahan MongoDB:Tidak dapat menerapkan pengubah $addToSet ke non-array

function addItem(list_id, item_name) {
    if(!item_name && !list_id)
      return;
    lists.update({_id:list_id}, {$addToSet:{items:{Name:item_name}}});
  }

Sepertinya Anda mencoba menambahkan objek ke set. Anda mendapatkan kesalahan pada simulasi. Mari kita selidiki kesalahan itu. Kode yang error:

https://github.com/meteor/meteor/blob /master/packages/minimongo/modify.js

 $addToSet: function (target, field, arg) {
    var x = target[field];
    if (x === undefined)
      target[field] = [arg];
    else if (!(x instanceof Array))
      throw Error("Cannot apply $addToSet modifier to non-array");
    else { ...

Uh oh, throw Error("Cannot apply $addToSet modifier to non-array.") .

Lihat kode Anda:

Object
  Category: "Tools"
  _id: "eaa681e1-83f2-49f2-a42b-c6d84e526270"
...
  items: Object
...

items adalah objek, bukan array! Ini akan error.

Bisakah Anda $addToSet ke objek dengan Mongo? Mari kita lihat kodenya.

https://github.com/mongodb/mongo/blob/4a4f9 /db/update.cpp

 case ADDTOSET: {
            uassert( 12592 ,  "$addToSet can only be applied to an array" , in.type() == Array );
            ...
        }

Tidak! Ini dari kode Mongo lama, karena basis kode kontemporer luas, tetapi hal yang sama.

Saya hanya menemukan satu insert dalam kode Anda.

'keyup #add-category': function(e, t) {
  if (e.which === 13) {
    var catVal = String(e.target.value || "");
    if (catVal) {
      lists.insert({Category:catVal});
      Session.set('adding_category', false);
    }
  }
},

Coba lists.insert({Category:catVal,items:[]}) . Sehingga item diinisialisasi sebagai array daripada objek saat pertama kali digunakan.

Juga, saya tidak berpikir $addToSet membandingkan objek dalam array seperti yang Anda inginkan, jadi pertimbangkan untuk membuat koleksi terpisah Items yang berisi categoryId .

Ini murni kebetulan bahwa itu bekerja di satu tempat dan bukan di tempat lain.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Praktik terbaik NoSQL

  2. Pos Layanan REST Node Mongo

  3. mgo:cara memperbarui array tertentu dalam dokumen

  4. perbarui array yang sangat bersarang mongodb

  5. Penghematan MongoDb melempar kesalahan untuk anggota pribadi kelas PHP