MongoDB, _id dizisinin neresinde?


93

mongo db'de SQL'de olduğu gibi koleksiyonun belgelerini seçmek mümkündür:

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

veya eğer varsa _id array, tek tek seçip array/objectsonuçları yeniden oluşturmalıyım?

Yanıtlar:


167

Kolay :)

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

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in adresinden alınmıştır


Hala indekslemenin faydalarını görüyor muyuz? Bu durumda kimlikler düz dizeler olarak aktarılır ...
Rafal Pastuszak

2
Siz yapıyorsunuz. Ancak zaman karmaşıklığı doğrusaldır (n), logaritmik / sabit değildir. İndeks olmadan n ^ 2 olurdu.
Petr Brazdil

Koleksiyonun büyüklüğü O(log(n) * m)nerede değil mi ve kimliklerin sayısı geçiyor mu? nm
Guig

8
"_İd" kimlik nesnesiyse, U ObjectId işlevini kullanmalısınız - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach

7

liste bir dizi kimliklerdir

Bu kod listesinde, kullanıcı koleksiyonundaki kimlikler dizisi bulunur

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

    .find({ _id: {$in : list}})

4
Kod çalışmıyor. Kimlikleri ObjectId ("5883d387971bb840b7399130") olarak ayarlamak zorunda görünüyor
Pax Beach

2

Çünkü mongodb kullanır bsonve bson için önemli öznitelik türleri. ve çünkü _idbunun ObjectIdgibi kullanmanız gerekir:

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

ve şu şekilde mongodb compasskullanımda:

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

Not: string'deki objectId'nin 24uzunluğu vardır.


2

Eğer kullanıcı tarafından ve ayrıca şartlı gibi başka alana göre bulmak istiyorsanız, kolayca yayılma ve üçlü operatör kullanılarak altında gibi yapabilir aggregatevematch

 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

Bu, mongo sorgusuyla ilgili değildir. SQL ile tanıştım ve SQL kullanarak bir mongo veritabanını sorgulamak için Studio3T IDE kullandım. Benim gibiyseniz, id değerinin yazılması gerektiğini belirtmek isterim. Böylece sorgu şöyle görünecektir:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
Bu soruya hiç hitap etmiyor.
loctrice

Cevap vermiyor, kabul etti. SQL kullanarak mongoDB ile etkileşim kurmanıza izin veren Studio3T gibi bazı IDE'ler konusunda yardımcı olabilir. İşte cevabın uygulaması var. Ayrıca, bu durumda bile _id türünün dönüştürülmesi gerektiğini vurgulamaktır.
sourabhxiii

1
onun hakkında mongodb
Rohit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.