我有一個lists
集合,其中每個文檔有一個數組members
。 members
數組的每個元素都是一個帶有email
屬性的文檔,創建date
屬性以及一些其他元。我在members.email
上有一個唯一索引,以防止同一個電子郵件被同一個列表兩次輸入,但我想保留原始date
的值。不幸的是,$addToSet
和$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.
))));
兩個例子都用新的更換整個嵌入的文檔由於(I假設)獨特的date
值。如果members.email
還不存在,或者我需要在兩個命令中執行此操作,是否可以只有$push
「成員」文檔?
或者,將members
置於其自己的集合中,類似parent_list
的屬性會更好的可擴展性嗎?
我幾乎可以肯定存在$是不是我要找的解決方案。 – Kevin 2010-12-06 02:17:28