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

Periksa apakah ada nilai dalam koleksi mongo

Pertama, jika Anda menyimpan dokumen Anda seperti sebuah array, mengapa Anda tidak menyimpannya sebagai sebuah array saja? Jika Anda berasal dari latar belakang database relasional, saya dapat melihat bagaimana Anda akan tergoda untuk menyimpannya seperti itu, tetapi di Mongo, jika itu seperti sebuah array, sebaiknya disimpan sebagai sebuah array.

{
    "_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
    "0" : "h",
    "1" : "o",
    "2" : "m"
}

Seharusnya:

{
    "_id" : ObjectId("52e5361f30f28b6b602e4c7f"),
    "keys" : [ "h", "o", "m" ]
}

Dalam hal ini, Mongo memiliki operator praktis yang disebut $addToSet yang akan bekerja seperti $push kecuali bahwa itu hanya akan menambahkannya ke array jika tidak ada. Operasi akan terlihat seperti ini:

collection.update( query, { $addToSet : { 'keys' : 'l' }}, callback );
// add key 'l'

collection.update( query, { $addToSet : { 'keys' : 'm' }}, callback );
// looks in document, sees 'm' in array, and does nothing

EDIT:

Dengan pembaruan, itu akan menambahkan kunci ke array jika tidak ada, tetapi jika Anda HANYA ingin tahu apakah itu ada atau tidak, saya pikir cara terbaik adalah menggunakan findOne :

// find the doc by _id  and the value you want in keys, returns null if it's not a match
collection.findOne({ _id : 52e5361f30f28b6b602e4c7f, 'keys' : 'l' }, function(err, doc) {
    if( doc == null ) {
        // do whatever you need to do if it's not there
    } else {
        // do whatever you need to if it is there
    }
    db.close();
}

Agar sisipan Anda tetap apa adanya, Anda hanya perlu mengubah Keys ke:

Keys = { 'keys' : [ 'key1', 'key2', 'key3' ] };

Dan sisipan tidak perlu diubah sebaliknya. Juga, dalam koleksi Anda, Anda mungkin ingin mengubah _id menjadi username atau tambahkan username bidang ke dokumen Anda.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah MongoDB menyediakan cara untuk menghasilkan nilai berurutan?

  2. Di mana saya harus meletakkan timeline aktivitas di mongodb, disematkan di pengguna atau secara terpisah?

  3. MongoDB php $in dan $regex

  4. Permintaan untuk bidang dalam objek dalam array dengan Mongo?

  5. Menginstal Mongodb dengan Lamp Di Ubuntu (Linux)