MongoDB pilih di mana dalam array _id?

93

mungkin di mongo db untuk memilih dokumen koleksi seperti di SQL:

SELECT * FROM collection WHERE _id IN (1,2,3,4);

atau jika saya memiliki, _id arraysaya harus memilih satu per satu dan kemudian menyusun ulang array/objecthasilnya?

ini aku
sumber

Jawaban:

167

Mudah :)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

diambil dari: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

programmer
sumber
Apakah kita masih mendapatkan manfaat dari pengindeksan? ID dalam hal ini diberikan sebagai string biasa ...
Rafal Pastuszak
2
Kamu lakukan. Namun kompleksitas waktu adalah linier (n), bukan logaritmik / konstanta. Tanpa indeks akan menjadi n ^ 2.
Petr Brazdil
Bukankah di O(log(n) * m)mana nukuran koleksinya dan mjumlah id yang diteruskan?
Guig
8
Anda harus menggunakan fungsi ObjectId, jika "_id" adalah objek ID - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach
7

list adalah array id

Dalam daftar kode ini adalah larik id dalam koleksi pengguna

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})
KARTHIKEYAN.A
sumber
4
Kode tidak berfungsi. Tampaknya harus menetapkan ID sebagai ObjectId ("5883d387971bb840b7399130")
Pax Beach
2

Karena penggunaan mongodb bsondan untuk bson adalah tipe atribut yang penting. dan karena _idadalah ObjectIdAnda harus menggunakan seperti ini:

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

dan di mongodb compasspakai seperti ini:

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

Catatan: objectId dalam string memiliki 24panjang.

ttrasn
sumber
2

Jika Anda ingin mencari berdasarkan pengguna dan juga oleh bidang lain seperti kondisional, Anda dapat dengan mudah melakukannya seperti di bawah dengan operator spread dan terner menggunakan aggregatedanmatch

 const p_id = patient_id;
    let fetchingReports = await Reports.aggregate([
      ...(p_id
        ? [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
                patient_id: p_id,
              },
            },
          ]
        : [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
              },
            },
        
Kode
sumber
-3

Ini tidak terkait dengan kueri mongo. Saya terbiasa dengan SQL dan menggunakan Studio3T IDE untuk meminta database mongo menggunakan SQL. Jika Anda seperti saya, saya ingin menunjukkan bahwa nilai id perlu diketik. Jadi kueri akan terlihat seperti:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");
sourabhxiii
sumber
2
Ini tidak menjawab pertanyaan sama sekali.
loctrice
Tidak menjawab, setuju. Ini mungkin membantu dengan beberapa IDE seperti Studio3T, yang memungkinkan Anda berinteraksi dengan mongoDB menggunakan SQL. Di sana jawabannya memiliki penerapan. Juga, ini untuk menyoroti bahwa bahkan dalam kasus itu _id harus bertipe cast.
Sourabhxiii
1
ini tentang mongodb
Rohit