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

Bandingkan array dan Kembalikan Perbedaannya

Satu-satunya hal yang "memodifikasi" dokumen sebagai tanggapan adalah .aggregate() dan .mapReduce() , di mana yang pertama adalah pilihan yang lebih baik.

Dalam hal ini Anda meminta $setDifference yang membandingkan "set" dan mengembalikan "perbedaan" antara keduanya.

Jadi mewakili dokumen dengan array Anda:

db.collection.insert({ "b": [1, 3, 5, 6, 7, 10] })

Jalankan agregasi:

db.collection.aggregate([{ "$project": { "c": { "$setDifference": [ [2,3,4], "$b" ] } } }])

Yang mengembalikan:

{ "_id" : ObjectId("596005eace45be96e2cb221b"), "c" : [ 2, 4 ] }

Jika Anda tidak ingin "set" dan sebaliknya ingin menyediakan array seperti [2,3,4,4] kemudian Anda dapat membandingkan dengan $filter dan $in sebagai gantinya, jika Anda memiliki MongoDB 3.4 setidaknya:

db.collection.aggregate([
  { "$project": {
    "c": {
      "$filter": {
        "input": [2,3,4,4],
        "as": "a",
        "cond": {
          "$not": { "$in": [ "$$a", "$b" ]  }
        }
      }
    }   
  }}
])

Atau dengan $filter dan $anyElementTrue di versi sebelumnya:

db.collection.aggregate([
  { "$project": {
    "c": {
      "$filter": {
        "input": [2,3,4,4],
        "as": "a",
        "cond": {
          "$not": {
            "$anyElementTrue": {
              "$map": {
                "input": "$b",
                "as": "b",
                "in": {
                  "$eq": [ "$$a", "$$b" ]    
                }
              }    
            }
          }
        }    
      }
    }    
  }}
])

Di mana keduanya akan kembali:

{ "_id" : ObjectId("596005eace45be96e2cb221b"), "c" : [ 2, 4, 4 ] }

Yang tentu saja "bukan satu set" sejak 4 diberikan sebagai masukan "dua kali" dan oleh karena itu dikembalikan "dua kali" juga.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kinerja ClusterControl dan Pemantauan Kesehatan

  2. Mengapa kumpulan instans yang menghasilkan Driver Node MongoDB menghancurkan kesalahan?

  3. Otentikasi pengguna labu

  4. Memperbarui array bersarang di dalam array mongodb

  5. MongoDB tidak dapat memulai server:Mesin penyimpanan default 'wiredTiger' tidak tersedia dengan build mongod ini