Tengo una colección lists
donde cada documento tiene una matriz de members
. Cada elemento de la matriz members
es un documento con una propiedad email
, una propiedad de creación date
y alguna otra meta. Tengo un índice único en members.email
para evitar que se ingrese el mismo correo electrónico en la misma lista dos veces, pero me gustaría conservar el valor original date
. Lamentablemente, ni $addToSet
ni $push
parecen hacer esto.
Ejemplo usando $ empuje:
$lists->update(array('_id' => $list['_id'], 'members.email' => array('$ne' => $email)), array('$push' => array('members' => array(
'email' => $email,
'date' => new MongoDate(),
// etc.
))));
Y con $ addToSet:
$lists->update(array('_id' => $list['_id']), array('$addToSet' => array('members' => array(
'email' => $email,
'date' => new MongoDate(),
// etc.
))));
Ambos ejemplos reemplazar todo el documento incrustado con el nuevo debido a (supongo) el valor único date
. ¿Es posible solo $push
el documento "miembro" si members.email
no existe o tendré que hacer esto en dos comandos?
Alternativamente, ¿sería mejor escalabilidad sabio poner el members
en su propia colección con una propiedad similar a parent_list
?
estoy casi seguro de $ existe no es la solución que estoy buscando. – Kevin