Docs Menu
Docs Home
/ /

Especifica qué campos se deben devolver

Utilice una proyección para controlar los campos que aparecen en los documentos devueltos por las operaciones de lectura. Muchas solicitudes solo requieren ciertos campos, por lo que las proyecciones pueden ayudarle a limitar el uso innecesario del ancho de banda de la red. Las proyecciones funcionan de dos maneras:

  • Incluir explícitamente campos con un valor de 1Esto tiene el efecto secundario de excluir implícitamente todos los campos no especificados.

  • Excluye implícitamente los campos con un valor de 0. Esto tiene el efecto secundario de incluir implícitamente todos los campos no especificados.

Estos dos métodos de proyección son mutuamente excluyentes: si incluye campos explícitamente, no puede excluirlos explícitamente, y viceversa.

Para seguir los ejemplos de esta guía, utilice el siguiente fragmento de código para insertar documentos que describan frutas en la colección myDB.fruits:

const myDB = client.db("myDB");
const myColl = myDB.collection("fruits");
await myColl.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);

Nota

Su consulta puede devolver una referencia a un cursor que contiene documentos coincidentes. Para saber cómo examinar los datos almacenados en el cursor, consulte Acceder a datos desde una página de cursor.

En la siguiente consulta, pase la proyección para devolver solo el campo name de cada documento:

// return only* the name field
const projectFields = { name: 1 };
const cursor = myColl.find().project(projectFields);
for await (const doc of cursor) {
console.dir(doc);
}

El documento de proyección especifica un valor de 1 para name. Esto instruye a la operación a incluir el campo name de cada documento devuelto en los resultados y excluir los campos qty y rating. Pasar esta proyección a find() con un documento de query vacío y sin documento de ordenación produce los siguientes resultados:

{ "_id": 1, "name": "apples" }
{ "_id": 2, "name": "bananas" }
{ "_id": 3, "name": "oranges" }
{ "_id": 4, "name": "avocados" }

Aunque esta proyección solo incluyó explícitamente el campo name, la consulta también devolvió el campo _id.

El _id campo es un caso especial, ya que siempre se incluye en todas las consultas a menos que se especifique lo contrario. Esto se debe a que _id es un identificador único para cada documento, una propiedad que se utiliza a menudo al construir consultas. Los movies datos de la colección demuestran por qué esta propiedad es necesaria: dos o más películas pueden compartir el mismo título, como las nuevas versiones. Por ello, se necesita un _id valor único para hacer referencia fiable a una película específica. _id es la única excepción al comportamiento mutuamente excluyente de inclusión-exclusión en las proyecciones: se puede excluir explícitamente _id incluso al incluir explícitamente otros campos si no _id se desea que esté presente en los documentos devueltos.

// return only the name field
const projectFields = { _id: 0, name: 1 };
const cursor = myColl.find().project(projectFields);
for await (const doc of cursor) {
console.dir(doc);
}

El documento de proyección especifica un valor de 1 para name y 0 _idpara. Esto indica a la operación que incluya el name campo de cada documento devuelto en los resultados y excluya los _id qtycampos,rating y. Al pasar esta proyección a find() con un documento de consulta vacío y sin documento de ordenación, se obtienen los siguientes resultados:

{ "name": "apples" }
{ "name": "bananas" }
{ "name": "oranges" }
{ "name": "avocados" }

También puede especificar varios campos para incluirlos en su proyección. Nota: El orden en que especifique los campos en la proyección no altera el orden en que se devuelven.

const projectFields = { _id: 0, rating: 1, name: 1 };
const cursor = myColl.find().project(projectFields);
for await (const doc of cursor) {
console.dir(doc);
}

Este ejemplo que identifica dos campos para incluir en la proyección arroja los siguientes resultados:

{ "name": "apples", "rating": 3 }
{ "name": "bananas", "rating": 1 }
{ "name": "oranges", "rating": 2 }
{ "name": "avocados", "rating": 5 }

Para más ejemplos de proyección, consulte la Página del manual de MongoDB sobre los campos del proyecto que se devolverán de la consulta.

Nota

Se debe encadenar un método de cursor como sort(), limit(), skip() o project() a una operación de lectura antes de iterar el cursor. Si se especifica un método de cursor después de iterar el cursor, la configuración no se aplica a la operación de lectura.

Volver

Especifica los documentos a devolver

En esta página