Чтобы избежать создания _id, необходимо установить параметр _id: false . Также, если вы не хотите сохранять пустой объект вложения, вам нужно установить default: undefined .
const MessageTypeSchema = new mongoose.Schema({
oAuth: {
type: String
},
attachments: {
type: [
{
type: String
}
],
_id: false,
default: undefined
}
});
Вот код, который я использовал для проверки:
console.log('-------- Document with attachments --------');
new MessageTypeModel({
oAuth:'xxxxxxxxxxxxx',
attachments: ['teste.png','teste2.jpg']
}).save().then(result => {
console.log(result);
});
console.log('-------- Document without attachments --------');
new MessageTypeModel({
oAuth:'xxxxxxxxxxxxx'
}).save().then(result => {
console.log(result);
});
А вот и результат выполнения:
Mongoose создает _id для отдельных вложенных вложенных документов или массивов , и поле вашего объекта oAuth не является одним из следующих случаев:
Субдокументы - это документы, встроенные в другие документы. В мангусте,
это означает, что вы можете вкладывать схемы в другие схемы. Мангуст имеет два
Отдельные понятия вложенных документов: массивы вложенных документов и отдельные
вложенные вложенные документы.
Каждый вложенный документ по умолчанию имеет _id. Мангуста
массивы документов имеют специальный метод идентификатора для поиска документа
массив для поиска документа с заданным _id.
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
// Array of subdocuments
children: [childSchema],
// Single nested subdocuments. Caveat: single nested subdocs only work
// in mongoose >= 4.2.0
child: childSchema
});
Ссылка на документацию Mongoose: Субдокументы Mongoose