#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. Вопрос неясен. В чем проблема, в чем вопрос ? Напишите это четко