Definición
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.
Sintaxis
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> } } }
Campos
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| 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 |
| Objeto | Puntuación para asignar a los resultados de búsqueda coincidentes. Utilice una de las siguientes opciones para modificar la puntuación:
| Opcional |
| 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 |
Ejemplos
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.
Índice de muestra
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
namecampo 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.
Queries de muestra
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
_iden los resultados.Incluya solo los campos
nameybirthdateen los resultados.
1 db.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
_iden los resultados.Incluya solo los campos
nameyaccountsen los resultados.
1 db.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
_idynameen los resultados.Añade un campo llamado
scorea los resultados.
1 db.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.
Consulta de facetas
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
1 db.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') } ] } } } ]