Docs Menu
Docs Home
/ /

Construir una ruta de consulta

El path El parámetro es utilizado por la búsqueda de MongoDB Operadores para especificar el campo o los campos que se buscarán. Puede contener:

  • Una cuerda

  • Una matriz de cadenas

  • Una especificación de analizador múltiple

  • Una matriz que contiene una combinación de cadenas y especificaciones de múltiples analizadores

Nota

No todos los operadores pueden usar todos los tipos de rutas. Consulte la documentación de cada operador para obtener más información sobre los tipos de rutas compatibles.

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 multi opción de ruta solo está disponible para campos de tipo cadena.

Si la definición de su índice contiene un campo con varios analizadores, puede especificar cuál usar. El path parámetro puede tomar 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 buscar cualquier carácter en el nombre del campo, incluidos los 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 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 llamada cars que tiene 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 campos estáticos le 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 make campo se indexa con el analizador estándar. El description campo utiliza el standard analizador de forma predeterminada, pero también puede usar el analizador simple especificando simpleAnalyzer con el multi parámetro.

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 [driver s side airbagcomo], por lo que coincide driver con.

Por el contrario, el analizador estándar predeterminado indexa driver's side airbag [driver's side airbagcomo], por lo que coincidiría con driver's o side pero no driver con.

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 llamado simpleAnalyzer en la definición del í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 consulta anterior sobre el Three término, MongoDB Search solo devuelve los documentos que coinciden con el término Three y no con, ya three que el analizador de espacios en blanco distingue entre mayúsculas y minúsculas. Por el contrario, el analizador estándar predeterminado no distingue entre mayúsculas y minúsculas y devuelve todos los documentos que coinciden con el término de la consulta en el orden en que aparecen en la colección.

Ahora, considere la siguiente consulta:

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."
}
}

Las asignaciones de campos dinámicos le permiten indexar todos los campos de 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 consulta anterior devuelve el documento con _id: 1, en el que el campo posts.body contiene la cadena 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 consultas buscan los campos especificados utilizando el carácter comodín * para la cadena red.

La siguiente consulta busca la cadena en todos los red campos.

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 consulta busca los campos anidados dentro del warehouse campo para la red cadena.

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