У меня есть коллекция lists
, где каждый документ имеет массив members
. Каждый элемент массива members
- это документ со свойством email
, свойством creation 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
. Можно ли только $push
«членский» документ, если members.email
еще не существует, или мне нужно будет сделать это двумя командами?
В качестве альтернативы, было бы лучше масштабировать, чтобы поместить members
в их собственную коллекцию с parent_list
-подобным свойством?