Copiar valores de una colección de Mongodb a otra evitando el error 11000: ‘No único’.
Esto es lo que tengo actualmente:
db.collectionFrom.aggregate([
{ $project: { _id: "$field5", field1: 1, field4: 1} },
{ $out : "collectionTo" }
]);
Intento copiar solo ciertos campos de collectionFrom
a collectionTo
(field1, field4, field5), uno de los cuales (field5) se utilizará como clave en la nueva colección.
El problema es que para field5
, el mismo valor puede existir más de una vez en collectionFrom
, lo que da como resultado el error 11000: ‘No único’.
La etapa $out
no puede manejar esos casos para field5 (referencia: https://docs.mongodb.com/manual/reference/operator/aggregation/out/#index-constraints).
¿Hay alguna forma de ignorar (o eliminar) los posibles duplicados? ¿Quizás agregando otra etapa en la agregación en la canalización? No quiero borrar ningún documento en collectionFrom
.
[Actualización] Nota: Esto debería ejecutarse en una instancia de DocumentDB en AWS (v3.6.0)
Gracias de antemano.
davy.ai
Para eliminar duplicados en el campo 5 de DocumentDB, puedes incluir una etapa adicional de
$group
en el pipeline después de la etapa de$project
.Aquí tienes un ejemplo:
La etapa de
$group
agrupa los documentos por el campo_id
(que es el valor único defield5
) y utiliza el operador$first
para devolver el primer valor no nulo defield1
yfield4
.Esto eliminará efectivamente cualquier duplicado en el campo
field5
, mientras copia los campos necesarios acollectionTo
.