Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Construya una ruta de query

La path el parámetro es utilizado por la búsqueda de MongoDB operadores para especificar el campo o los campos a buscar. Puede incluir:

  • A string

  • Un arreglo de cadenas de texto

  • Una especificación de múltiple analizadores

  • Un arreglo que contiene una combinación de cadenas y especificaciones de análisis múltiple

Nota

No todos los operadores pueden usar todos los diferentes tipos de caminos. Consulta la documentación de cada operador individual para obtener detalles sobre los tipos de caminos que admite.

To search only a single indexed field, use a quoted string in the path parameter. The following example searches a field named description.

"path": "description"

To search multiple indexed fields, use an array of quoted strings in the path parameter. Documents which match on any of the specified fields are included in the result set. The following example searches the description and type fields.

"path": [ "description", "type" ]

Nota

La opción de ruta multi solo está disponible para campos de tipo string.

Si tu definición de índice contiene un campo con varios analizadores, puedes especificar cuál usar. El parámetro path puede aceptar un objeto con los siguientes campos:

Campo
Descripción

value

El nombre del campo que se va a buscar.

multi

El nombre del analizador alternativo especificado en un multi objeto en una definición de índice. Para obtener más información, consulte Multianalizador.

wildcard

El objeto que contiene el carácter comodín * para coincidir con cualquier carácter en el nombre del campo a buscar, incluidos campos anidados. Una ruta comodín:

  • Debe definirse como un objeto.

  • No puede contener la opción value o multi.

  • No puede contener varios caracteres comodín consecutivos como **.

La ruta de comodín solo es aceptada por los siguientes operadores:

También se acepta la trayectoria con comodines para resalte.

En la siguiente definición de índice, los campos denominados names y notes utilizan el analizador estándar. Un campo denominado comments utiliza standard como su analizador por defecto y también especifica un multi denominado mySecondaryAnalyzer que utiliza el analizador lucene.whitespace.

{
"mappings": {
"dynamic": false,
"fields": {
"names": {
"type": "string",
"analyzer": "lucene.standard"
},
"notes": {
"type": "string",
"analyzer": "lucene.standard"
},
"comments": {
"type": "string",
"analyzer": "lucene.standard",
"multi": {
"mySecondaryAnalyzer": {
"analyzer": "lucene.whitespace",
"type": "string"
}
}
}
}
}
}

The following path example searches the comments field using the multi named mySecondaryAnalyzer in the index definition.

"path": { "value": "comments", "multi": "mySecondaryAnalyzer" }

To search a combination of indexed fields and fields with multiple analyzers, use an array. The following example searches the names and notes fields with the default analyzer, and the comments field using the multi named mySecondaryAnalyzer in the index definition.

"path": [ "names", "notes", { "value": "comments", "multi": "mySecondaryAnalyzer" } ]

The following path example searches all the fields that contain the letter n followed by any characters, and the comments field using the multi named mySecondaryAnalyzer in the index definition.

"path": [{ "wildcard": "n*" }, { "value": "comments", "multi": "mySecondaryAnalyzer" }]

Los siguientes ejemplos utilizan una colección denominada cars, que contiene los siguientes documentos:

{
"_id" : 1,
"type" : "sedan",
"make" : "Toyota",
"description" : "Blue four-door sedan, lots of trunk space. Three
to four passengers."
}
{
"_id" : 2,
"type" : "coupe",
"make" : "BMW",
"description" : "Red two-door convertible, driver's-side airbag."
}
{
"_id" : 3,
"type" : "SUV",
"make" : "Ford",
"description" : "Black four-door SUV, three rows of seats."
}

Las asignaciones de campo estático te permiten especificar cómo se deben indexar y buscar los campos individuales dentro de una colección.

La definición del índice para la colección cars es la siguiente:

{
"mappings": {
"dynamic": false,
"fields": {
"make": {
"type": "string",
"analyzer": "lucene.standard"
},
"description": {
"type": "string",
"analyzer": "lucene.standard",
"multi": {
"simpleAnalyzer": {
"analyzer": "lucene.simple",
"type": "string"
}
}
}
}
}
}

La definición de índice anterior especifica que el campo make está indexado con el analizador estándar. El campo description utiliza el analizador standard por defecto, pero también puede utilizar el analizador sencillo especificando simpleAnalyzer con el parámetro multi.

The following example searches for the string Ford in the make field:

db.cars.aggregate([
{
$search: {
"text": {
"query": "Ford",
"path": "make"
}
}
}
])

El ejemplo anterior devuelve el documento con _id: 3.

El siguiente ejemplo utiliza una matriz de campos en el parámetro path para buscar la cadena blue en el campo make o description.

db.cars.aggregate([
{
$search: {
"text": {
"query": "blue",
"path": [ "make", "description" ]
}
}
}
])

La consulta anterior devuelve el siguiente resultado:

{
"_id" : 1,
"type" : "sedan",
"make" : "Toyota",
"description" : "Blue four-door sedan, lots of trunk space. Three to four
passengers."
}

El siguiente ejemplo utiliza el multi llamado simpleAnalyzer en la definición del índice, que utiliza el analizador simple.

La consulta busca en el campo description la cadena driver.

db.cars.aggregate([
{
$search: {
"text": {
"query": "driver",
"path": { "value": "description", "multi": "simpleAnalyzer" }
}
}
}
])

La consulta anterior devuelve el siguiente resultado:

{
"_id" : 2,
"type" : "coupe",
"make" : "BMW",
"description" : "Red two-door convertible, driver's-side airbag."
}

El analizador simple indexa driver's side airbag como [driver s side airbag], por lo que coincide con driver.

Por el contrario, el analizador estándar por defecto indexa driver's side airbag como [driver's side airbag, así que establecería una coincidencia en driver's o side pero no en driver.

Supongamos que el objeto multi en la definición de índice para la colección cars es el siguiente:

"multi": {
"simpleAnalyzer": {
"analyzer": "lucene.whitespace",
"type": "string"
}
}

El siguiente ejemplo utiliza el multi denominado simpleAnalyzer en la definición de índice, que utiliza el analizador de espacios en blanco.

db.cars.aggregate([
{
$search: {
"text": {
"query": "Three",
"path": { "value": "description", "multi": "simpleAnalyzer" }
}
}
}
])

La consulta anterior devuelve el siguiente resultado:

{
"_id" : 1,
"type" : "sedan",
"make" : "Toyota",
"description" : "Blue four-door sedan, lots of trunk space. Three to
four passengers."
}

Para la query anterior correspondiente al término Three, MongoDB Search solo devuelve documentos que coinciden con el término Three y no con three porque el analizador de espacios en blanco es sensible a las mayúsculas y minúsculas. Por el contrario, el analizador estándar por defecto no distingue entre mayúsculas y minúsculas y devuelve todos los documentos que coinciden con el término en la query en el orden en que están listados en la colección.

Ahora, considera la siguiente query:

db.cars.aggregate([
{
$search: {
"compound": {
"should": [
{
"text": {
"path": "description",
"query": "Three"
}
},
{
"text": {
"query": "Three",
"path": { "value" : "description", "multi" : "simpleAnalyzer" },
score: { boost: { value: 2 }}
}
}
]
}
}
},
{
$project: {
"_id": 0,
"type": 1,
"description": 1,
"score": { "$meta": "searchScore" }
}
}
])

La consulta anterior devuelve los siguientes resultados:

{
"type" : "sedan",
"description" : "Blue four-door sedan, lots of trunk space. Three to four passengers seats.",
"score" : 1.1092689037322998
}
{
"type" : "SUV",
"description" : "Black four-door SUV, three rows of seats.",
"score" : 0.17812025547027588
}

En la query anterior, MongoDB Search devuelve documentos que contienen tanto Three como three. Sin embargo, el puntaje del resultado con Three es mayor porque, mientras que el documento con three se coincidió utilizando el analizador estándar por defecto, el documento con Three se coincidió tanto por el simpleAnalyzer específico como por el analizador estándar.por defecto.

El siguiente ejemplo utiliza una colección llamada posts con los siguientes documentos:

{
"_id": 1,
"username": "pinto",
"post": {
"date": "12-03-2018",
"forum": "Tofu Recipes",
"body": "Spicy Garlic Tofu cooks up crispy in 10 minutes or less.
Serve with broccoli and rice for a delicious vegetarian meal."
}
}
{
"_id": 2,
"username": "paloma",
"post": {
"date": "12-08-2018",
"forum": "Tofu Recipes",
"body": "Crispy Tofu in Shiitake Broth has flavors of citrus and
umami. Great as an appetizer or entree."
}
}

Mapeos de campos dinámicos permiten indexar todos los campos en una colección según sea necesario.

La definición del índice para la colección posts es la siguiente:

{
"mappings": {
"dynamic": true
}
}

La siguiente consulta del operador compuesto busca en el campo post.body la cadena broccoli, y también especifica que el campo no debe contener la cadena cauliflower.

db.posts.aggregate([
{
$search: {
"compound": {
"must": {
"text": {
"query": "broccoli",
"path": "post.body"
}
},
"mustNot": {
"text": {
"query": "cauliflower",
"path": "post.body"
}
}
}
}
}
])

La query anterior devuelve el documento con _id: 1, en el que el campo de posts.body contiene la string broccoli.

El siguiente ejemplo utiliza una colección llamada cars, que tiene los siguientes documentos:

{
"_id" : 1,
"type" : "sedan",
"make" : "Toyota",
"description" : "Four-door sedan, lots of trunk space. Three to four passengers.",
"warehouse" : [
{
"inventory" : 3,
"color" : "red"
}
]
}
{
"_id" : 2,
"type" : "coupe",
"make" : "BMW",
"description" : "Two-door convertible, driver's-side airbag.",
"warehouse" : [
{
"inventory" : 5,
"color" : "black"
}
]
}
{
"_id" : 3,
"type" : "SUV",
"make" : "Ford",
"description" : "Four-door SUV, three rows of seats.",
"warehouse" : [
{
"inventory" : 7,
"color" : "white"
},
{
"inventory" : 3,
"color" : "red"
}
]
}

La definición del índice para la colección cars es la siguiente:

{
"mappings": {
"dynamic": true
}
}

Las siguientes queries buscan en los campos especificados utilizando el comodín * la string red.

La siguiente query busca en todos los campos la string red.

db.cars.aggregate([
{
"$search": {
"phrase": {
"path": { "wildcard": "*" },
"query": "red"
}
}
}
])

La query devuelve los siguientes resultados:

{
"_id" : 1,
"type" : "sedan",
"make" : "Toyota",
"description" : "Four-door sedan, lots of trunk space. Three to four passengers.",
"warehouse" : [
{ "inventory" : 3, "color" : "red" }
]
}
{
"_id" : 3,
"type" : "SUV",
"make" : "Ford",
"description" : "Four-door SUV, three rows of seats.",
"warehouse" : [
{ "inventory" : 7, "color" : "white" },
{ "inventory" : 3, "color" : "red" }
]
}

La siguiente query busca la string red en los campos anidados dentro del campo warehouse.

db.cars.aggregate([
{
"$search": {
"text": {
"path": { "wildcard": "warehouse.*" },
"query": "red"
}
}
}
])

La query devuelve los siguientes resultados:

{
"_id" : 1,
"type" : "sedan",
"make" : "Toyota",
"description" : "Four-door sedan, lots of trunk space. Three to four passengers.",
"warehouse" : [
{ "inventory" : 3, "color" : "red" }
]
}
{
"_id" : 3,
"type" : "SUV",
"make" : "Ford",
"description" : "Four-door SUV, three rows of seats.",
"warehouse" : [
{ "inventory" : 7, "color" : "white" },
{ "inventory" : 3, "color" : "red" }
]
}

Volver

Comodín

En esta página