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
/ /

Sincronización filtrada

Novedad en la versión 1.1.

Mongosync migra datos entre dos clústeres de MongoDB. Puede usar la sincronización filtrada para especificar qué bases de datos y colecciones la La utilidad mongosync transfiere entre los clústeres de origen y destino.

A partir de la versión 1.1, mongosync Admite filtros de inclusión para especificar qué bases de datos y colecciones se incluirán en la sincronización. A partir de 1.6, mongosync también admite filtros de exclusión y expresiones regulares.

  • Con filtros de inclusión, mongosync sincroniza las bases de datos y colecciones coincidentes.

  • Con filtros de exclusión, mongosync sincroniza todas las bases de datos y colecciones, excepto aquellas que coinciden con los filtros.

  • Con ambos filtros de inclusión y exclusión, mongosync sólo sincroniza las bases de datos y colecciones que coinciden con los filtros de inclusión y luego excluye las que también coincidan con los filtros de exclusión.

  • Sin filtros, mongosync sincroniza todas las bases de datos y colecciones.

El start punto final de la API acepta dos campos que configuran la sincronización filtrada: includeNamespaces y excludeNamespaces. Cada campo acepta un arreglo de filtros que especifican las bases de datos y colecciones a incluir o excluir de la sincronización.

Nota

Si la llamada start utiliza tanto los parámetros includeNamespaces como excludeNamespaces, primero mongosync hace coincidir bases de datos y colecciones de los filtros de inclusión, y luego excluye aquellos que también coinciden con un filtro de exclusión.

Los filtros tienen la siguiente sintaxis:

"includeNamespaces": [
{
"database": "<database-name>",
"collections": [
"<collection-name>"
]
"databaseRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
},
"collectionsRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
}
}
],
"excludeNamespaces": [
{
"database": "<database-name>",
"collections": [
"<collection-name>"
]
"databaseRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
},
"collectionsRegex": {
"pattern": "<regex-pattern>",
"options": "<options>"
}
}
]

Para obtener más información sobre la pattern sintaxis de las options expresiones regulares y, consulte Expresiones regulares en filtros.

Los filtros deben incluir el campo database o el campo databaseRegex.

Si necesitas que el filtro haga coincidir colecciones específicas, puedes usar tanto el arreglo collections para especificar colecciones individualmente como definir una expresión regular con el campo collectionsRegex.

Importante

Una vez que inicies mongosync con un filtro aplicado, no se podrá modificar el filtro. Si es necesario crear un nuevo filtro, consulta: Reiniciar Mongosync.

1

Identifica las bases de datos y colecciones que deseas sincronizar con el clúster de destino.

  • Al agregar un conjunto de bases de datos al filtro, también se excluyen las demás bases de datos en el clúster.

  • Cuando se especifica una colección en el filtro, también se excluyen otras colecciones que se encuentren en la misma base de datos.

2

La start API acepta dos parámetros que configuran filtros opcionales:

  • El parámetro includeNamespaces toma una matriz de filtros, que se utilizan para determinar qué bases de datos y colecciones mongosync deben incluirse en la sincronización.

  • El parámetro excludeNamespaces toma un arreglo de filtros, que se usan para determinar de qué bases de datos y colecciones mongosync deben excluirse de la sincronización.

Si no se especifica un filtro, mongosync realiza una sincronización completa del clúster.

Cree filtros de inclusión y/o exclusión para identificar las bases de datos y colecciones que desea sincronizar.

Por ejemplo, este filtro de inclusión configuraría mongosync para que solo sincronizara las colecciones cuyos nombres comiencen con accounts_ de la base de datos sales, excepto la colección accounts_old:

"includeNamespaces": [
{
"database": "sales",
"collectionsRegex": {
"pattern": "^accounts_.+?$",
"options": "ms"
}
],
"excludeNamespaces": [
{
"database": "sales",
"collections": [
"accounts_old"
]
}
]

Para obtener más información sobre los filtros, consulte Sintaxis de filtro.

3

Para usar el filtro, adjunte el JSON del filtro cuando realice una llamada a la API /start para comenzar a sincronizar.

curl -X POST "http://localhost:27182/api/v1/start" --data '
{
"source": "cluster0",
"destination": "cluster1",
"includeNamespaces": [
{
"database": "sales",
"collectionsRegex": {
"pattern": "^accounts_.+$",
"options": "i"
}
}, {
"database": "marketing"
}
]
} '

Para una configuración de ejemplo, consulta: Comienza mongosync con un filtro.

No se puede actualizar un filtro existente. Debes detener el proceso de sincronización en curso, preparar el clúster de destino y reiniciar mongosync con un nuevo filtro. Para reiniciar mongosync, consulta: Reiniciar Mongosync.

Puede, con algunas restricciones, añadir o rename a collection durante una sincronización filtrada.

Advertencia

Si su operación de cambio de nombre viola las restricciones de cambio de nombre, mongosync deja de sincronizar y reporta un error.

Para limpiar y reiniciar después de un error, siga los pasos para reemplazar un filtro existente.

Puede agregar nuevas colecciones o cambiar el nombre de una colección existente si toda la base de datos forma parte del filtro.

También se puede renombrar una colección si tanto el nombre antiguo como el nuevo están especificados en el filtro.

Vea los ejemplos de cambio de nombre.

Solo puede cambiar el nombre de una colección entre bases de datos si toda la base de datos de destino forma parte de un filtro. Si el filtro especifica colecciones individuales en la base de datos de destino, el renombrado entre bases de datos no funciona.

Vea los ejemplos de cambio de nombre.

Para utilizar la $out etapa de agregación o el comando (cuando mapReduce se configura para crear o reemplazar una colección) con filtrado, debe filtrar toda la base de datos y no solo la colección especificada.

Por ejemplo, considere esta canalización de agregación:

use library
db.books.aggregate( [
{ $group : { _id : "$author", titles: { $push: "$title" } } },
{ $out : "authors" }
] )

La etapa $out crea la colección authors en la base de datos library. Si deseas sincronizar la colección authors, debes especificar toda la base de datos library en tu filtro. El filtro no funcionará si solo especificas la colección authors.

Este filtro funciona:

"includeNamespaces": [
{
"database": "library"
}
]

Este filtro no funciona:

"includeNamespaces": [
{
"database": "library",
"collections": [ "authors", "books" ] // DOES NOT WORK WITH $OUT
}
]
  • El filtrado no es compatible con la sincronización reversible.

  • El clúster de destino no debe contener datos de usuario antes de comenzar a menos que establezca el parámetro preExistingDestinationData en true al llamar a /start.

  • El clúster de destino no debe contener la base de datos del sistema mongosync_reserved_for_internal_use antes de comenzar.

  • No puede modificar un filtro que esté en uso. Para crear un nuevo filtro, consulta: Reemplazar un filtro existente.

  • Solo puedes renombrar las colecciones en ciertas situaciones. Para más detalles, consulta: Agregar y renombrar colecciones.

  • Si un filtro incluye una vista pero no la colección base, sólo los metadatos de la vista se sincronizan con el clúster de destino. Para incluir los documentos de vista, también debe sincronizar la colección base.

  • No puedes especificar colección del sistema ni base de datos del sistema en un filtro.

  • Para usar la $out etapa de agregación o el comando (cuando mapReduce se configura para crear o reemplazar una colección) con filtrado, debe configurar el filtro para que use toda la base de datos. No puede limitar el filtro a colecciones dentro de la base de datos.

    Para obtener más información, consulta Filtrado con mapReduce y $out.

  • El filtrado no admite el bloqueo de escritura dual. Puede usar el bloqueo de escritura solo en el destino.

El siguiente ejemplo inicia un trabajo de sincronización entre el clúster de origen cluster0 y el clúster de destino cluster1.

cluster0 contiene las bases de datos sales, marketing y engineering.

La base de datos sales contiene las colecciones EMEA, APAC y AMER.

El arreglo includeNamespaces en este ejemplo define un filtro en dos de las bases de datos, sales y marketing.

La base de datos sales también filtra las colecciones EMEA y APAC.

"includeNamespaces" : [
{
"database" : "sales",
"collections": [ "EMEA", "APAC" ]
},
{
"database" : "marketing"
}
]

Después de llamar a la API /start con este filtro implementado, mongosync:

  • Sincroniza todas las colecciones en la base de datos marketing

  • Filtra la base de datos engineering

  • Sincroniza las colecciones EMEA y APAC de la base de datos sales

  • Se filtra la colección AMER

El siguiente ejemplo inicia un trabajo de sincronización entre el clúster de origen cluster0 y el clúster de destino cluster1.

cluster0 contiene las bases de datos students, staff y prospects.

  • La base de datos students contiene las colecciones undergrad, graduate y adjuncts.

  • La base de datos staff contiene las colecciones employees y contractors.

La matriz includeNamespaces en este ejemplo define un filtro en dos de las bases de datos:

{
"source": "cluster0",
"destination": "cluster1",
"includeNamespaces":
[
{ "database" : "students", "collections": ["undergrad", "graduate", "adjuncts"] },
{ "database" : "staff" }
]
}

Con este filtro activado, mongosync se sincroniza:

  • Toda la base de datos staff

  • Las colecciones undergrad, graduate y adjuncts en la base de datos students

mongosync no sincroniza ninguna información de la base de datos prospects.

mongosync Sincroniza toda la base de datos staff. Si agrega nuevas colecciones a la base de datos staff, mongosync también las sincroniza.

mongosync no sincroniza las nuevas colecciones que se agregan a la base de datos students a menos que la colección sea parte del filtro.

Por ejemplo, mongosync no sincroniza la nueva colección si se añade la colección postdocs a la base de datos students. Si añades la adjuncts colección, mongosync la sincroniza, ya que adjuncts forma parte del filtro.

Puedes cambiar el nombre de cualquier colección en la base de datos staff.

// This code works
use admin
db.runCommand( { renameCollection: "staff.employees", to: "staff.salaried" } )

Solo puedes renombrar una colección dentro de la base de datos students si los nombres nuevo y antiguo están ambos en el filtro. Si alguno de los nombres no está en el filtro, monogsync informa de un error y termina la operación.

// This code works
use admin
db.runCommand( { renameCollection: "students.graduate", to: "students.adjuncts" } )

Si se especifica una colección en el filtro, puedes eliminarla, pero no puedes cambiarle el nombre para eliminarla del filtro.

// This code produces an error and mongosync stops syncing
use admin
db.runCommand( { renameCollection: "students.graduate", to: "students.notAFilteredCollection" } )

Cuando toda la base de datos de destino esté incluida en el filtro, puede cambiar el nombre de las colecciones para agregarlas al filtro:

  • La colección fuente se especifica en el filtro

    use admin
    db.runCommand( { renameCollection: "students.adjuncts", to: "staff.adjuncts" } )
  • La colección de origen no está especificada en el filtro

    use admin
    db.runCommand( { renameCollection: "prospects.current", to: "staff.newHires" } )

También puedes cambiar el nombre de las colecciones en la base de datos de origen cuando toda la base de datos de destino está en el filtro:

use admin
db.runCommand( { renameCollection: "staff.employees", to: "staff.onPayroll" } )

Importante

Si anticipas cambiar el nombre de colecciones, considera añadir toda la base de datos al filtro en vez de especificar colecciones individuales.

Volver

Estados de mongosync

En esta página