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?

Jawaban:


167

Mudah :)

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

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


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}})

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.


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),
              },
            },
        

-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");

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.