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

Temukan Dokumen Di Mana Bidang Dibandingkan dengan Bidang Lain dalam Array

Anda masih dapat menggunakan aggregate() di sini dengan MongoDB 3.2, tetapi hanya menggunakan $redact sebagai gantinya:

db.boards.aggregate([
  { "$redact": {
    "$cond": {
      "if": {
        "$and": [
          { "$ne": [ "$createdBy._id", "$owner._id" ] },
          { "$setIsSubset": [["$createdBy._id"], "$acl.profile._id"] }
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

Atau dengan $where untuk shell MongoDB 3.2, Anda hanya perlu menyimpan salinan cakupan this , dan sintaks Anda sedikit salah:

db.boards.find({
  "$where": function() {
    var self = this;
    return (this.createdBy._id != this.owner._id)
      && this.acl.some(function(e) {
        return e.profile._id === self.createdBy._id
     })
  }
})

Atau di lingkungan yang kompatibel dengan ES6 maka:

db.boards.find({
  "$where": function() {
    return (this.createdBy._id != this.owner._id)
      && this.acl.some(e => e.profile._id === this.createdBy._id)
  }
})

Agregat adalah opsi yang paling berkinerja dari keduanya dan harus selalu lebih disukai daripada menggunakan evaluasi JavaScript

Dan untuk apa nilainya, sintaks yang lebih baru dengan $expr akan menjadi:

db.boards.find({
  "$expr": {
    "$and": [
      { "$ne": [ "$createdBy._id", "$owner._id" ] },
      { "$in": [ "$createdBy._id", "$acl.profile._id"] }
    ]
  }
})

Menggunakan $in dalam preferensi untuk $setIsSubset di mana sintaksnya sedikit lebih pendek.

    return (this.createdBy._id.valueOf() != this.owner._id.valueOf())
      && this.acl.some(e => e.profile._id.valueOf() === this.createdBy._id.valueOf())



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tidak dapat terhubung dengan superuser MongoDB ke database lain dari terminal

  2. Permintaan luwak untuk dokumen dari 24 jam terakhir, hanya satu dokumen per jam

  3. Skema MongoDB terbaik untuk klon Twitter?

  4. Binning dan tabulasi (unik/hitungan) di Mongo

  5. Di MongoDB, saya menggunakan kueri besar, bagaimana saya akan membuat indeks gabungan atau indeks tunggal, Jadi waktu respons saya meningkat