Предполагам:
{
g: [
{ _id: ObjectId(), property: '' },
// next
]
}
Тип структура за този въпрос.
Не нормално. _id s са уникални идентификатори за обекти. Като такъв, ако искате да добавите _id в рамките на обект на поддокумент, тогава може да не сте нормализирали данните си много добре и това може да е знак за основен пропуск в дизайна на вашата схема.
Поддокументите са предназначени да съдържат повтарящи се данни за този документ, т.е. адресите или потребител или нещо подобно.
Това се казва _id не винаги е лошо да добавите. Вземете примера, който току-що посочих с адресите. Представете си, че трябва да имате система за пазарска количка и (по някаква причина) не сте копирали адреса в документа за поръчка, тогава ще използвате _id или някакъв друг идентификатор, за да извадите този поддокумент.
Също така трябва да вземете предвид свързването на документи. Ако това _id описва друг документ и свойствата са персонализирани атрибути за този документ във връзка с този свързан документ, тогава това също е добре.
ObjectId все още е доста голям, така че това е нещо, което трябва да се вземе предвид при по-малък, по-малко уникален идентификатор или неизползване на _id изобщо за поддокументи.
За индекси всъщност не работи по нищо различно от стандартния _id поле в самия документ и уникален индекс в полето трябва да работи в цялата колекция (в зависимост от сценария, тествайте вашите заявки).
NB:MongoDB няма да добави _id към поддокументи за вас.