Вы можете создать уникальный составной разреженный индекс , чтобы выполнить то, что вы ожидаете. Возможно, это не лучший вариант (клиентская сторона все еще может быть лучше), но он может выполнять то, что вы просите, в зависимости от конкретных требований.
Чтобы сделать это, вам нужно создать еще одно поле на том же уровне, что и Name: Bob
, уникальное для каждой записи верхнего уровня (можно указать FirstName + LastName + Address, мы назовем этот ключ Identifier
).
Затем создайте индекс, подобный этому:
ensureIndex({'Identifier':1, 'Items.name':1},{'unique':1, 'sparse':1})
Разреженный индекс будет игнорировать элементы, у которых нет поля, поэтому это должно решить вашу ключевую проблему NULL
. Объединение вашего уникального идентификатора и Items.name
в качестве составного уникального индекса должно гарантировать, что вы не можете иметь одно и то же имя элемента дважды на человека.
Хотя я должен добавить, что я работаю с Монго всего пару месяцев, и моя наука может быть отключена. Это основано не на эмпирических данных, а на наблюдаемом поведении.
Подробнее об индексах MongoDB