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.