#node.js #mongodb #typescript #mongoose #typegoose
#node.js #mongodb #typescript #мангуст #typegoose
Вопрос:
Я добавил pre
хук для updateOne
событий, но он работает иначе save
, чем события…
Я предполагаю, что это связано с тем, что команда update обычно передает сопоставитель в качестве первого аргумента. Я пытался поймать второй аргумент, но это анонимная функция, которую я не уверен, как использовать.
Документы Mongoose говорят об этом, но я не уверен, как на самом деле изменить схему Mongoose непосредственно из Typegoose.
https://mongoosejs.com/docs/middleware.html
Примечание: В отличие от schema.pre(‘remove’), Mongoose регистрирует промежуточное ПО updateOne и deleteOne в запросах #updateOne() и Query#deleteOne() по умолчанию. Это означает, что как doc.updateOne(), так и Model.updateOne() запускают хук updateOne , но это относится к запросу, а не к документу. Чтобы зарегистрировать промежуточное программное обеспечение updateOne или deleteOne в качестве промежуточного программного обеспечения document, используйте schema.pre(‘updateOne’, { document: true, query: false }).
// this does NOT work
@pre<Question>('updateOne', function (opts) {
debug.log('updating', this)
debug.log('opts', opts)
recalcVotes(this) // incompatible type
})
// this does work
@pre<Question>('save', function () {
this.cname = this.cname || makeCname(this.text)
this.simple = this.simple || makeCname(this.text)
// mutates because we can't modify 'this = ..'
recalcVotes(this)
debug.log('cleaned', this)
})
Argument of type 'Query<Question>' is not assignable to parameter of type 'Question'.
Type 'Query<Question>' is missing the following properties from type 'Question': text, tag, _id
РЕДАКТИРОВАТЬ: я только что обновился до последних версий пакета
Больше не выдает ошибку, но типы разные.
- "mongoose": "^5.10.15",
"mongoose": "^5.11.0",
и intellisense обнаруживает разные типы для этого предварительно updateOne
против save
хуков
pre.updateOne = any
pre.save = this: DocumentType<Question>
npm ls mongoose
bot@1.0.0 /Users/dc/dev/ten/puzzleparty/server
└── mongoose@5.11.0
npm ls @typegoose/typegoose
bot@1.0.0 /Users/dc/dev/ten/puzzleparty/server
└── @typegoose/typegoose@7.4.2
npm -v
6.14.9
node -v
v14.5.0
npx tsc -v
Version 4.1.2
Комментарии:
1. какие версии typegoose amp; mongoose и @types/mongoose используются?
2. Я наткнулся на последнюю версию и проверил еще раз
3. не могли бы вы обновить typegoose до версии 7.4.4 (и mongoose до версии 5.10.18, максимально поддерживаемой typegoose на данный момент) и сообщить об этом?
4. Это беспорядок, вы должны использовать оба.
Ответ №1:
Я думаю, что он жалуется, потому что вы пытаетесь вернуть документ, в то время как это просто запрос