我有一个列表集合,其中每个文档都有一个成员数组.成员数组的每个元素都是一个包含电子邮件属性,创建日期属性和其他元数据的文档.我在members.email上有一个唯一的索引,以防止同一个电子邮件被输入同一个列表两次,但我想保留原始日期值.不幸的是,$addToSet和$push似乎都没有这样做.
使用$push的示例:
$lists->update(array('_id' => $list['_id'],'members.email' => array('$ne' => $email)),array('$push' => array('members' => array( 'email' => $email,'date' => new MongoDate(),// etc. ))));
并使用$addToSet:
$lists->update(array('_id' => $list['_id']),array('$addToSet' => array('members' => array( 'email' => $email,// etc. ))));
由于(我假设)唯一的日期值,这两个示例都用新的替换整个嵌入文档.如果members.email尚不存在,或者我需要在两个命令中执行此操作,是否可以仅$$推送“成员”文档?
或者,将成员放在具有类似parent_list的属性的自己的集合中会更好地实现可伸缩性吗?