La documentación de mongo establece que "Cuando un documento se guarda en una colección con índices únicos, cualquier clave indexada que falte se insertará con valores nulos. Por lo tanto, no será posible insertar varios documentos sin la misma clave indexada".¿Cómo se consiguen los valores perdidos en un índice único con mongo db?
Entonces, ¿es imposible crear un índice único en un campo opcional? ¿Debo crear un índice compuesto con decir un userId también para resolver esto? En mi caso específico, tengo una colección de usuarios que tiene un objeto oauth incorporado opcional. p.
>db.users.ensureIndex({ "name":1, "oauthConnections.provider" : 1, "oauthConnections.providerId" : 1 });
Mi usuario de ejemplo
{ name: "Bob"
,pwd: "myPwd"
,oauthConnections [
{
"provider":"Facebook",
"providerId" : "12345",
"key":"blah"
}
,{
"provider":"Twitter",
"providerId" : "67890",
"key":"foo"
}
]
}
Bueno, incluso está documentado: "Puede combinar disperso con exclusivo para producir una restricción única que ignora documentos con campos faltantes". – MrKurt
otra pregunta, si no puede tener índices compuestos dispersos, ¿puede tener un índice disperso en un objeto incrustado o en un campo anidado? En el ejemplo anterior, nos gustaría tener un índice en la colección embebida de oauthConnections. – MonkeyBonkey