Docs Menu
Docs Home
/ /

in Operador

El operador in en MongoDB Search realiza una búsqueda de una matriz de BSON number, date, boolean, objectId, uuid o string en la ruta dada y devuelve los documentos cuyo valor del campo es igual a cualquier valor de la matriz especificada. Si el campo contiene una matriz, el operador in selecciona los documentos cuyo campo contiene una matriz que contiene al menos un elemento que coincide con cualquier valor de la matriz especificada.

El operador in tiene la siguiente sintaxis:

{
$search: {
"index": <index name>, // optional, defaults to "default"
"in": {
"path": "<field-to-search>",
"score": <options>,
"value": <single-or-array-of-values-to-search>
}
}
}
Campo
Tipo
Descripción
Necesidad

path

cadena o matriz de cadenas

Campo o campos indexados para buscar. También puede especificar una ruta comodín para la búsqueda.

Para buscar valores de cadena en un campo, debe indexar el campo como la búsqueda de MongoDB tipode token.

Requerido

score

Objeto

Puntuación para asignar a los resultados de búsqueda coincidentes. Utilice una de las siguientes opciones para modificar la puntuación:

  • boost:multiplica la puntuación del resultado por el número dado.

  • constant:reemplace la puntuación del resultado con el número dado.

  • function:reemplace la puntuación del resultado utilizando la expresión de función.

Opcional

value

booleano, objectId, número, fecha, uuid o cadena

Valor o valores a buscar. El valor puede ser un valor único o una matriz de valores de solo uno de los tipos BSON admitidos y no puede ser una combinación de diferentes tipos.

Para buscar valores de cadena en un campo, debe indexar el campo como el tipo de token de búsqueda de MongoDB.

Requerido

Los siguientes ejemplos utilizan el in operador para consultar colecciones en la colección sample_analytics.customers. Si carga los datos de muestra en su clúster y crea un índice de búsqueda de MongoDB llamado default que utiliza asignaciones estáticas en la colección, puede ejecutar las siguientes consultas en las colecciones.

La definición del índice de muestra especifica las siguientes acciones para admitir consultas del operador in en los campos indexados de la colección:

  • Indexa automáticamente todos los campos indexables dinámicamente en la colección.

  • Indexa estáticamente el name campo como tipo de token y convierte el texto del campo a minúsculas.

{
"mappings": {
"index": "default",
"dynamic": true,
"fields": {
"name": {
"normalizer": "lowercase",
"type": "token"
}
}
}
}

Para aprender a crear un índice de búsqueda de MongoDB, consulta Administrar índices de búsqueda de MongoDB.

La siguiente consulta utiliza el in operador para buscar en el birthdate campo, que contiene un solo valor, clientes nacidos en las fechas indicadas. La consulta utiliza la etapa $project para:

  • Omitir el campo _id en los resultados.

  • Incluya solo los campos name y birthdate en los resultados.

1db.customers.aggregate([
2 {
3 "$search": {
4 "in": {
5 "path": "birthdate",
6 "value": [ISODate("1977-03-02T02:20:31.000+00:00"), ISODate("1977-03-01T00:00:00.000+00:00"), ISODate("1977-05-06T21:57:35.000+00:00")]
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 0,
13 "name": 1,
14 "birthdate": 1
15 }
16 }
17])
1[
2 {
3 name: 'Elizabeth Ray',
4 birthdate: ISODate("1977-03-02T02:20:31.000Z")
5 },
6 {
7 name: 'Brad Cardenas',
8 birthdate: ISODate("1977-05-06T21:57:35.000Z")
9 }
10]

MongoDB Search devuelve dos documentos que coinciden con las fechas especificadas en la consulta.

La siguiente query utiliza el operador in para consultar el campo accounts, que contiene un arreglo de números, para clientes con los números de cuenta 371138, 371139, o 371140. La consulta utiliza la etapa $project para:

  • Omitir el campo _id en los resultados.

  • Incluya solo los campos name y accounts en los resultados.

1db.customers.aggregate([
2 {
3 "$search": {
4 "in": {
5 "path": "accounts",
6 "value": [371138, 371139, 371140]
7 }
8 }
9 },
10 {
11 "$project": {
12 "_id": 0,
13 "name": 1,
14 "accounts": 1
15 }
16 }
17])
1[
2 {
3 name: 'Elizabeth Ray',
4 accounts: [ 371138, 324287, 276528, 332179, 422649, 387979 ]
5 }
6]

MongoDB Search devuelve solo un documento que coincide con el número de cuenta 371138 especificado en la consulta.

La siguiente consulta utiliza el text operador para buscar clientes cuyo nombre sea James en el name campo. La consulta especifica la preferencia mediante el in operador para los clientes asociados con los objectIds especificados en el _id campo. La consulta utiliza la etapa para limitar la salida $limit a 5 resultados y la etapa $project para:

  • Incluya solo los campos _id y name en los resultados.

  • Añade un campo llamado score a los resultados.

1db.customers.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "must": [{
6 "in": {
7 "path": "name",
8 "value": ["james sanchez", "jennifer lawrence"]
9 }
10 }],
11 "should": [{
12 "in": {
13 "path": "_id",
14 "value": [ObjectId("5ca4bbcea2dd94ee58162a72"), ObjectId("5ca4bbcea2dd94ee58162a91")]
15 }
16 }]
17 }
18 }
19 },
20 {
21 "$limit": 5
22 },
23 {
24 "$project": {
25 "_id": 1,
26 "name": 1,
27 "score": { $meta: "searchScore" }
28 }
29 }
30])
1[
2 {
3 _id: ObjectId("5ca4bbcea2dd94ee58162a72"),
4 name: 'James Sanchez',
5 score: 2
6 },
7 {
8 _id: ObjectId("5ca4bbcea2dd94ee58162a71"),
9 name: 'Jennifer Lawrence',
10 score: 1
11 }
12]

MongoDB Search devuelve documentos que contienen James Sanchez y Jennifer Lawrence en el campo name. MongoDB Search otorga una puntuación más alta al documento que contiene name: 'James Sanchez' porque coincide con el ObjectId especificado en la cláusula should.

La siguiente consulta utiliza el operador in para buscar clientes activos en el campo active, que contiene un valor booleano. La consulta devuelve el número de clientes activos cuya fecha de nacimiento se encuentra en los siguientes grupos:

  • 1970-01-01, inclusive el límite inferior para este segmento

  • 1980-01-01, límite superior exclusivo para el segmento 1970-01-01 y límite inferior inclusivo para este segmento

  • 1990-01-01, límite superior exclusivo para el segmento 1980-01-01 y límite inferior inclusivo para este segmento

  • 2000-01-01, límite superior exclusivo para el depósito 1990-01-01

1db.customers.aggregate([
2 {
3 "$searchMeta": {
4 "facet": {
5 "operator": {
6 "in": {
7 "path": "active",
8 "value": null
9 }
10 },
11 "facets": {
12 "birthdateFacet": {
13 "type": "date",
14 "path": "birthdate",
15 "boundaries": [ISODate("1970-01-01"), ISODate("1980-01-01"), ISODate("1990-01-01"), ISODate("2000-01-01")],
16 "default": "other"
17 }
18 }
19 }
20 }
21 }
22])
[
{
count: { lowerBound: Long('1') },
facet: {
birthdateFacet: {
buckets: [
{
_id: ISODate('1970-01-01T00:00:00.000Z'),
count: Long('1')
},
{
_id: ISODate('1980-01-01T00:00:00.000Z'),
count: Long('0')
},
{
_id: ISODate('1990-01-01T00:00:00.000Z'),
count: Long('0')
}
]
}
}
}
]

Volver

hasRoot

En esta página