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

Apakah mungkin untuk mendapatkan sepotong irisan di Mongo?

Anda perlu menggunakan pipa agregasi untuk mencapai $slice rantai, karena keterbatasan dalam pernyataan proyek yang menjadi bagian dari kueri pencarian.

Kueri di bawah ini tidak valid karena $slice pertama akan mengembalikan array, bukan indeks, dan eksekusi $slice . yang dilingkupi luar gagal.

db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})

Selain itu, tidak ada cara untuk mengerjakan bidang yang diproyeksikan dalam pernyataan proyek yang sama, jika memungkinkan, kita dapat memodifikasi teks lebih lanjut dengan menerapkan $slice padanya.

Caranya adalah:

  • Match catatan dengan nama sebagai foo.
  • Unwind array teks untuk sampai ke tingkat pertama.
  • Unwind lagi untuk mencapai level yang kita inginkan.
  • Group catatan bersama-sama dengan nama.
  • Project record terakhir dalam grup yang juga merupakan elemen terakhir dari array bersarang terakhir.

Kode:

db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$group:{"_id":"$name","text":{$last:"$text"}}},
{$project:{"name":"$_id","text":1}}
])

atau jika Anda ingin memproyeksikan elemen yang muncul dalam urutan tertentu, Anda dapat menggunakan $skip dan $limit operasi untuk mencapai ini.

var orderOfElement = 2;
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$skip:orderOfElement -1},
{$limit:1}
])

Yang memproyeksikan elemen kedua secara berurutan dalam array bersarang.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cara mengonversi array menjadi objek di MongoDB

  2. Cara memperbarui item dari array yang bersarang di dalam array

  3. menu mean.js adalahPublik tidak berfungsi

  4. Javascript momentjs mengonversi UTC dari string ke Objek Tanggal

  5. MongoDB - apakah DBREF diperlukan?