Оператор Mongoose $push, похоже, пропускает проверку схемы

#node.js #mongoose

Вопрос:

Я использую Мангуст 6.0.13 и узел V14.17.6. Поэтому я пытаюсь переместить элемент в поле массива. Например, children поле в коде.

Похоже, что у мангуста разное поведение в операторе $push и push() для массива вложенных документов. И только последний пройдет проверку схемы, как и ожидалось.

 // test.ts import { connect, model, Schema } from 'mongoose';  const childSchema = new Schema({  bar: { type: Schema.Types.String },  name: { type: Schema.Types.String, required: true }, }, { strict: true });  const parentSchema = new Schema({  foo: { type: Schema.Types.String },  children: [{ type: childSchema }], }, { strict: true });  const Parent = model('parent', parentSchema, 'parent'); const invalidChild = { bar: 'bar' };  const option1 = async (): Promiselt;anygt; =gt; {  const parent = await Parent.create({ foo: 'validation_success' });   parent.children.push(invalidChild);  await parent.save();   return parent; };  const option2 = async (): Promiselt;anygt; =gt; {  const parent = await Parent.create({ foo: 'validation_fail' });   const updatedParent = await Parent.findOneAndUpdate(  { _id: parent._id.toString() },  { $push: { children: invalidChild } },  { new: true },  );   return updatedParent; };  async function main(): Promiselt;voidgt; {  const client = await connect('mongodb://localhost:27017/testdb');   const p1 = await option1().catch(() =gt; {  console.log('OPTION 1 validation works!');  });   const p2 = await option2().catch(() =gt; {  console.log('OPTION 2 validation works!');  });   client.connection.close(); }  main();  // result: only p1 throw error.  

Комментарии:

1. Вопрос неясен. В чем проблема, в чем вопрос ? Напишите это четко