【发布时间】:2014-06-26 16:25:39
【问题描述】:
我有一个lists 集合,其中每个文档都有一个members 数组。 members 数组的每个元素都是一个具有email 属性、创建date 属性和一些其他元的文档。我在members.email 上有一个唯一索引,以防止同一电子邮件被两次输入到同一个列表中,但我想保留原来的date 值。不幸的是,$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,
'date' => new MongoDate(),
// etc.
))));
由于(我假设)唯一的 date 值,这两个示例都将整个嵌入文档替换为新文档。如果members.email 尚不存在,是否可以仅$push“成员”文档,或者我需要在两个命令中执行此操作?
或者,将members 放入具有parent_list-like 属性的集合中会更好吗?
【问题讨论】: