Если у вас есть массивы вложенных документов, Mongoose автоматически создает идентификаторы для каждого из них. Пример:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Есть ли способ сказать Mongoose не создавать идентификаторы для объектов в массиве?
_id
поля даже в коллекции подсхемы или только в том случае, если подсхема используется для встраивания в массив элементов поддокумента? Я спрашиваю об этом, в частности, из-за моего собственного вопроса о SO сегодня.{ _id: false }
, оба уровня подсхемы не имеют идентификаторов. Есть ли способ обойти это поведение?{ _id : true }
?let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });
на это:let studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });
и это остановило_id
создание,studentSchema
но сохранило_id
создание объектов вperformance
массиве поддокументов. Не уверен, что и то_id: false
и другоеid: false
нужно.Вы можете создавать вложенные документы без схемы и избежать
_id
. Просто добавьте_id:false
в вашу декларацию под-документа.Это предотвратит создание
_id
поля в вашем поддокне.Проверено в мангусте
v5.9.10
источник
Кроме того, если вы используете литеральный синтаксис объекта для указания подсхемы, вы также можете просто добавить ее
_id: false
для подавления.источник
Я использую mongoose 4.6.3, и все, что мне нужно было сделать, это добавить в схему _id: false, не нужно создавать подсхему.
источник
_id
это поле, а не ограничение._id = mongoose.Types.ObjectId()
этого поддокумента я явно назначу , будет ли _id уникальным для всей коллекции?Вы можете использовать любой из
или
Проверьте вашу версию мангуста, прежде чем использовать второй вариант
источник
Если вы хотите использовать предопределенную схему (с _id) в качестве вложенного документа (без _id), вы можете сделать следующее теоретически:
Но это не сработало для меня. Поэтому я добавил, что:
Теперь я могу включить subSourceSchema в родительский документ без _id. Я не уверен, что это чистый способ сделать это, но это работает.
источник