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

Bagaimana cara menggunakan $arrayElemAt dan menghapus bidang dari elemen itu di MongoDB $projection?

Ini dari sintaks arrayElemAt

Yang berarti Anda dapat membuat elemen array sesuka Anda. Dalam kasus Anda, Anda hanya menginginkan nama. Jadi ini seharusnya berhasil:

[{
  $match: {
    jobCategoryId: mongoose.Types.ObjectId(jobCategoryId)
  }
}, {  
  $lookup: {  
    from: 'users',
    localField: 'userId',
    foreignField: '_id',
    as: 'user'
  }
}, {  
  $project: {  
    _id: 1,
    description: 1,
    title: 1,
    user: {  
      name: {
        $arrayElemAt: ["$user.name", 0]
      }
    }
  }
}]

Tindak lanjuti PEMBARUAN :ditanya bagaimana cara menambahkan properti di atas name . Inilah proyeknya:

{  
  $project: {  
    _id: 1,
    description: 1,
    title: 1,
    user: {  
      name: {  
        $arrayElemAt: ["$user.name", 0]
      },
      email: {  
        $arrayElemAt: ["$user.email", 0]
      }
    }
  }
}

Tindak lanjut kedua seperti yang ditanyakan Drag0 dalam komentar:Jika hal di atas tidak cukup baik karena hasilnya menghasilkan pengguna:[] larik ukuran 1 sebagai ganti pengguna objek:{} yang berikut ini bisa digunakan.

{  
  $project: {
    _id: 1,
    description: 1,
    title: 1,
    user: {
      $let: {
        vars: {
          firstUser: {
            $arrayElemAt: ["$user", 0]
          }
        },
        in: {
          name: "$$firstUser.name",
          email: "$$firstUser.email"
        }
      }
    }
  }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring boot 2.0.5.RELEASE dan masalah koneksi mongo 4.0

  2. Pengecualian batas waktu soket di Mongo

  3. Mengunggah dan menyimpan gambar

  4. Bagaimana cara multi pembaruan array bersarang di MondoDB?

  5. Mongodb bagaimana cara memasukkan HANYA jika tidak ada (tidak ada pembaruan jika ada)?