MongoDB seleccione dónde en la matriz de _id?

91

es posible en mongo db seleccionar los documentos de la colección como en SQL:

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

o si tengo un _id arraydebo seleccionar uno por uno y luego recomponer los array/objectresultados?

soy yo
fuente

Respuestas:

166

Fácil :)

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

extraído de: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

programador
fuente
¿Seguimos obteniendo beneficios de la indexación? Las identificaciones en ese caso se pasan como cadenas simples ...
Rafal Pastuszak
2
Tú lo haces. Sin embargo, la complejidad del tiempo es lineal (n), no logarítmica / constante. Sin índice sería n ^ 2.
Petr Brazdil
¿No es O(log(n) * m)dónde nestá el tamaño de la colección y mel número de identificadores pasados?
Guig
8
Tienes que usar la función ObjectId, si "_id" es el objeto de ID - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach
5

la lista es una matriz de identificadores

En esta lista de códigos está la matriz de identificadores en la colección de usuarios

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

    .find({ _id: {$in : list}})
KARTHIKEYAN.A
fuente
4
El código no funciona. Parece tener que establecer ID como ObjectId ("5883d387971bb840b7399130")
Pax Beach
0

Porque mongodb usa bsony para bson son tipos de atributos importantes. y porque _ides ObjectIdusted debe usar la siguiente manera:

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

y en mongodb compassuso así:

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

Nota: objectId en cadena tiene 24longitud.

ttrasn
fuente
0

si desea buscar por usuario y también por otro campo como condicionalmente, puede hacerlo fácilmente como a continuación con el operador de propagación y ternario usando aggregateymatch

 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),
              },
            },
        
Código
fuente
-4

Esto no está relacionado con la consulta mongo. Estaba familiarizado con SQL y usé Studio3T IDE para consultar una base de datos mongo usando SQL. Si eres uno como yo, quiero señalar que el valor de id debe ser redactado. Entonces la consulta se verá así:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");
sourabhxiii
fuente
2
Esto no aborda la cuestión en absoluto.
loctrice
No responde, asintió. Puede ayudar con algunos IDE como Studio3T, que le permiten interactuar con mongoDB usando SQL. Ahí tiene aplicación la respuesta. Además, es de resaltar que incluso en ese caso, el _id tiene que ser de tipo fundido.
sourabhxiii
1
se trata de mongodb
Rohit