MongoDB: $addToSet/$pousser document uniquement si elle n'existe pas déjà

J'ai un lists collection où chaque document dispose d'un tableau de members. Chaque élément de la members tableau est un document avec un email la propriété, la création date de la propriété, et quelques autres méta. J'ai un index unique sur members.email pour éviter le même e-mail étant entré dans la même liste à deux reprises, mais je tiens à conserver l'original date valeur. Malheureusement, ni $addToSet ni $push semblent le faire.

Exemple à l'aide de $push:

$lists->update(array('_id' => $list['_id'], 'members.email' => array('$ne' => $email)), array('$push' => array('members' => array(
    'email' => $email,
    'date' => new MongoDate(),
    //etc.
))));

Et avec $addToSet:

$lists->update(array('_id' => $list['_id']), array('$addToSet' => array('members' => array(
    'email' => $email,
    'date' => new MongoDate(),
    //etc.
))));

Les deux exemples, remplacer l'ensemble du document incorporé par le nouveau en raison (je suppose) l'unique date valeur. Est-il possible de ne $push le "membre" d'un document si members.email n'existe pas déjà ou ai-je besoin pour ce faire de deux commandes?

Sinon, serait-il une meilleure évolutivité-sage de mettre le members dans leur propre collection avec un parent_list-comme la propriété?

OriginalL'auteur Kevin | 2010-12-05