Docs Menu
Docs Home
/ /

Especificar campos a devolver

En esta guía, aprenderá a especificar los campos que se devolverán de una operación de lectura mediante una proyección. Una proyección es un documento que especifica los campos que MongoDB devuelve de una consulta.

Los ejemplos de esta página utilizan el sample_mflix.movies colección de la Conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Introducción al controlador .NET/C#.

La siguiente clase representa los documentos de la colección sample_mflix.movies:

public class Movie
{
public ObjectId Id { get; set; }
public string Title { get; set; }
public List<string> Genres { get; set; }
public string Type { get; set; }
public string Plot { get; set; }
public List<BsonDocument> Highlights { get; set; }
public string Score { get; set; }
[BsonElement("scoreDetails")]
public SearchScoreDetails ScoreDetails { get; set; }
[BsonElement("searchScoreDetails")]
public SearchScoreDetails SearchScoreDetails { get; set; }
[BsonElement("paginationToken")]
public string PaginationToken { get; set; }
public List<string> Cast { get; set; }
[BsonElement("plot_embedding")]
public float[] PlotEmbedding { get; set; }
}

Nota

ConventionPack para Pascal Case

Las propiedades de la clase anterior se nombran en Pascal, pero los nombres de campo de la colección MongoDB usan CamelCase. Para compensar esta diferencia, puede usar el siguiente código para registrar un ConventionPack al iniciar la aplicación:

var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);

Para crear una proyección, realice los siguientes pasos:

  1. Utilice la propiedad estática Builders<TDocument>.Projection para crear un objeto ProjectionDefinitionBuilder<TDocument>, donde TDocument representa la clase de C# a la que se asignan los documentos de la colección. La clase ProjectionDefinitionBuilder proporciona una interfaz con seguridad de tipos para definir una proyección.

  2. Métodos de proyección de cadena del objeto ProjectionDefinitionBuilder<TDocument> para especificar qué campos incluir o excluir de los documentos devueltos.

  3. Almacene el objeto ProjectionDefinition<TDocument> resultante en una variable.

  4. Pase la variable al método Project() después de realizar la operación de búsqueda o agregación.

Las siguientes secciones describen los métodos que puedes encadenar desde tu objeto ProjectionDefinitionBuilder<TDocument>.

Los siguientes métodos le permiten especificar qué campos incluir o excluir de los documentos devueltos.

El método ElemMatch() limita el contenido de un campo de matriz en los resultados de la consulta para que contenga únicamente el primer elemento que cumpla una condición especificada. Esto equivale a proyectar un elemento de matriz mediante el operador $elemMatch en la API de consultas de MongoDB.

Para ver un ejemplo de código que utiliza el ElemMatch() método, consulte $elemMatch en el manual de MongoDB Server.

El método Expression() permite especificar la estructura de los documentos devueltos mediante una expresión lambda. Esto equivale a especificar la estructura de los documentos devueltos en la etapa de agregación $project de la API de consultas de MongoDB.

Para ver un ejemplo de código que utiliza el Expression() método, consulte $project en el manual de MongoDB Server.

Nota

Exclusión de campo ID

Cuando utiliza una expresión lambda para crear una proyección, la salida excluye automáticamente el campo Id a menos que lo incluya explícitamente.

El método Exclude() permite especificar un campo para excluirlo de los documentos devueltos. Esto equivale a excluir un campo en la etapa de agregación $project de la API de consultas de MongoDB. No se pueden combinar declaraciones de inclusión y exclusión en una sola proyección a menos que se excluya el campo _id.

Para ver un ejemplo de código que utiliza el Exclude() método, consulte $project en el manual de MongoDB Server.

Nota

Excluir explícitamente el campo _id

Los documentos devueltos incluyen el campo _id a menos que lo excluya explícitamente. La única excepción es cuando se usa el método Expression() para crear una proyección.

El método Include() permite especificar un campo para incluirlo en los documentos devueltos. Esto equivale a incluir un campo en la etapa de agregación $project de la API de consultas de MongoDB.

Para ver un ejemplo de código que utiliza el Include() método, consulte $project en el manual de MongoDB Server.

El método Slice() especifica el número de elementos de una lista o matriz que se devolverán en el campo de resultado de la consulta. Esto equivale a usar el operador $slice en la API de consultas de MongoDB.

El siguiente ejemplo de código utiliza el método Slice() para devolver los primeros tres elementos de la lista Cast en la matriz cast del documento devuelto:

var filter = Builders<Movie>.Filter.Text("future");
var projection = Builders<Movie>
.Projection
.Slice(m => m.Cast, 3)
.Include(m => m.Cast);
var results = movieCollection.Find(filter)
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "573a1398f29313caabceb500"
},
"title": "Back to the Future Part II",
"cast": [
"Michael J. Fox",
"Christopher Lloyd",
"Lea Thompson"
]
}

Para devolver elementos del final de una colección, pase un entero negativo al método Slice(). El siguiente ejemplo de código devuelve los tres últimos elementos de la lista Cast en la matriz cast del documento devuelto:

var filter = Builders<Movie>.Filter.Text("future");
var projection = Builders<Movie>
.Projection
.Slice(m => m.Cast, -3)
.Include(m => m.Title);
var results = movieCollection.Find(filter)
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "573a1398f29313caabceb500"
},
"title": "Back to the Future Part II",
"cast": [
"Lea Thompson",
"Thomas F. Wilson"
]
}

Para omitir un número específico de elementos en una colección, pase el número de elementos a omitir como primer parámetro y el número de elementos a devolver como segundo parámetro. El siguiente ejemplo de código omite el primer elemento de la lista Cast y devuelve los tres elementos siguientes del array cast:

var filter = Builders<Movie>.Filter.Text("future");
var projection = Builders<Movie>
.Projection
.Slice(m => m.Cast, 1, 3)
.Include(m => m.Title);
var results = movieCollection.Find(filter)
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "573a1398f29313caabceb500"
},
"title": "Back to the Future Part II",
"cast": [
"Christopher Lloyd",
"Lea Thompson",
"Thomas F. Wilson"
]
}

Para obtener más información sobre el $slice operador, consulte $slice en el manual de MongoDB Server.

Los siguientes métodos permiten especificar qué campos de metadatos se incluirán o excluirán de los documentos devueltos. Los campos de metadatos están ocultos de forma predeterminada.

El método Meta() te permite especificar un campo de metadatos que se incluirá en los documentos devueltos. Esto es equivalente a incluir un campo de metadatos utilizando el operador $meta en la API de query de MongoDB.

El siguiente ejemplo de código agrega el campo de metadatos textScore a los documentos devueltos como un campo llamado score:

var filter = Builders<Movie>.Filter.Text("future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.Meta(field: "score", metaFieldName: "textScore");
var results = movieCollection.Find(filter)
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "..."
},
"plot": "...",
"title": "...",
"score": "..."
}

Nota

Solo búsqueda en MongoDB

Este método solo está disponible al proyectar los resultados de una búsqueda de MongoDB.

El MetaSearchHighlights() incluye los resaltados de búsqueda en los documentos devueltos. Esto equivale a proyectar los resaltados de búsqueda mediante un objeto { "$meta": "searchHighlights" } en la API de consultas de MongoDB. Para recuperar los resaltados de búsqueda, debe crear un objeto SearchHighlightOptions que especifique el campo de búsqueda y luego pasar este objeto al método Search().

El siguiente ejemplo de código recupera los resaltados de búsqueda para el campo plot y luego incluye estos resaltados en una propiedad denominada Highlights en los documentos devueltos:

var filter = Builders<Movie>.Search.Text(path: m => m.Plot, query: "future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.MetaSearchHighlights(m => m.Highlights);
var results = movieCollection
.Aggregate()
.Search(filter, new SearchHighlightOptions<Movie> (m => m.Plot))
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "573a13def29313caabdb5661"
},
"plot": "She Can See Her Future, But Can't Escape Her Past.",
"title": "West",
"highlights": [
{
"score": 1.286744475364685,
"path": "plot",
"texts": [
{
"value": "She Can See Her ",
"type": "text"
},
{
"value": "Future",
"type": "hit"
},
{
"value": ", But Can't Escape Her Past.",
"type": "text"
}
]
}
]
}

Para obtener más información sobre los destacados de la búsqueda, consulta Resaltar términos de búsqueda en los resultados en la documentación de Atlas.

Nota

Solo búsqueda en MongoDB

Este método solo está disponible al proyectar los resultados de una búsqueda de MongoDB.

El método MetaSearchScore() incluye las puntuaciones de búsqueda en los documentos devueltos. Esto equivale a proyectar puntuaciones de búsqueda utilizando un objeto { "$meta": "searchScore" } en la API de query de MongoDB.

El siguiente ejemplo de código proyecta la puntuación de búsqueda de cada documento en un campo llamado score:

var filter = Builders<Movie>.Search.Text(m => m.Plot, "future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.MetaSearchScore(m => m.Score);
var results = movieCollection
.Aggregate()
.Search(filter)
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "573a13def29313caabdb5661"
},
"plot": "She Can See Her Future, But Can't Escape Her Past.",
"title": "West",
"score": 2.8259084224700928
}

Para obtener más información sobre las puntuaciones de búsqueda, consulte Puntuar los documentos en los resultados.

Nota

Solo búsqueda en MongoDB

Este método solo está disponible al proyectar los resultados de una búsqueda de MongoDB.

El MetaSearchScoreDetails() incluye detalles sobre las puntuaciones de búsqueda en los documentos devueltos. Esto equivale a proyectar los detalles de las puntuaciones de búsqueda mediante un objeto { "$meta": "searchScoreDetails" } en la API de consultas de MongoDB.

Para recuperar los detalles de la puntuación, cree un objeto SearchOptions con su propiedad ScoreDetails establecida en true y, a continuación, páselo al método Search(). El siguiente ejemplo de código muestra este proceso proyectando los detalles de la puntuación de búsqueda de cada documento en un campo llamado searchScoreDetails:

var filter = Builders<Movie>.Search.Text(m => m.Plot, "future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.MetaSearchScore(m => m.Score)
.MetaSearchScoreDetails(m => m.SearchScoreDetails);
var results = movieCollection
.Aggregate()
.Search(filter, new SearchOptions<Movie>() { ScoreDetails = true})
.Project(projection)
.Limit(1)
.ToList();
{
"_id": {
"$oid": "573a13def29313caabdb5661"
},
...
"scoreDetails": {
"value": 2.8259084224700928,
"description": "$type:string/plot:future [BM25Similarity], result of:",
"details": [
{
"value": 2.8259084224700928,
"description": "score(freq=1.0), computed as boost * idf * tf from:",
"details": [
...
}

Para obtener más información sobre los detalles de la puntuación de búsqueda, consulte Devolver los detalles de la puntuación en la documentación de Atlas.

Nota

Solo búsqueda en MongoDB

Este método solo está disponible al proyectar los resultados de una búsqueda de MongoDB.

El método MetaSearchSequenceToken() incluye un token en los documentos devueltos que representa un punto en la secuencia de búsqueda. Esto equivale a proyectar el token de la secuencia de búsqueda mediante un objeto { "$meta": "searchSequenceToken" } en la API de consultas de MongoDB. Puede usar este token para realizar búsquedas adicionales antes o después del punto especificado.

El siguiente ejemplo de código proyecta el token de secuencia de búsqueda de cada documento en una propiedad denominada PaginationToken:

var filter = Builders<Movie>.Search.Text(m => m.Plot, "future");
var projection = Builders<Movie>.Projection
.Include(m => m.Title)
.Include(m => m.Plot)
.MetaSearchSequenceToken(m => m.PaginationToken);
var results = movieCollection
.Aggregate()
.Search(filter)
.Limit(1)
.Project(projection)
.ToList();
{
"_id": {
"$oid": "573a13def29313caabdb5661"
},
"plot": "She Can See Her Future, But Can't Escape Her Past.",
"title": "West",
"paginationToken": "CIeaARWv2zRAIg5aDFc6E97ykxPKq9tWYQ=="
}

Para obtener más información sobre los tokens de secuencia de búsqueda, consulte Paginar resultados de búsqueda

El método MetaTextScore() incluye las puntuaciones de búsqueda $text en los documentos devueltos. Esto equivale a proyectar la puntuación de búsqueda de texto mediante un objeto { "$meta": "textScore" } en la API de consultas de MongoDB.

Para un ejemplo de código que use el método MetaTextScore(), consulte $meta en el manual del servidor de MongoDB.

Nota

Búsqueda vectorial únicamente en MongoDB

Este método solo está disponible cuando se proyectan los resultados de una búsqueda vectorial de MongoDB.

El método MetaVectorSearchScore() incluye las puntuaciones de MongoDB Vector Search en los documentos devueltos. Esto equivale a proyectar la puntuación de MongoDB Vector Search mediante un objeto { "$meta": "vectorSearchScore" } en la API de consultas de MongoDB.

Para ver un ejemplo de código que utiliza el MetaVectorSearchScore() método, consulte Búsqueda vectorial de MongoDB.

Para obtener más información sobre las puntuaciones de búsqueda vectorial de MongoDB, consulte Puntuación de los documentos en los resultados en la documentación de Atlas.

Nota

Solo búsqueda en MongoDB

Este método solo está disponible al proyectar los resultados de una búsqueda de MongoDB.

El método SearchMeta() incluye un documento de resultados de metadatos. La estructura de este documento depende del tipo de resultados. Esto equivale a proyectar el documento de resultados de metadatos mediante la etapa de agregación $searchMeta o la variable de agregación $$SEARCH_META en la API de consultas de MongoDB.

Para ver un ejemplo de código que utiliza el SearchMeta() método, consulte Cómo usar facetas con la búsqueda de MongoDB en la documentación de Atlas.

Para obtener más información sobre $searchMeta y $$SEARCH_META, consulta la siguiente documentación de Atlas:

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Especifica los documentos a devolver

En esta página