私は他の多くのモデルで同じようなことをしていますが、このモデルでは機能していません。誰かが間違いを見ることができますか?
注文スキーマ:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var OrderItem = require('./orderitem');
var OrderSchema = new Schema({
_account: {type: Schema.Types.ObjectId, ref: 'Account', required: true},
status: String,
active: Boolean,
comment: String,
items: [{type: Schema.Types.ObjectId, ref: 'OrderItem'}]
}, { timestamps: true });
OrderSchema.pre('remove', function(next) {
console.log('order ID:', this._id);
OrderItem.remove({_order: this._id}, next);
});
module.exports = mongoose.model('Order', OrderSchema);
注文アイテムのスキーマ:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var OrderItem = new Schema({
_item: {type: Schema.Types.ObjectId, ref: 'Item', required: '{PATH} is required!'},
_account: {type: Schema.Types.ObjectId, ref: 'Account', required: '{PATH} is required!'},
_order: {type: Schema.Types.ObjectId, ref: 'Order', required: '{PATH} is required!'},
comment: String,
quantity: {type: Number, required: '{PATH} is required!'}
}, { timestamps: true });
OrderItem.pre('validate', function (next) {
var Item = require('./item');
var err;
Item.findOne({_id: this._item, _account: this._account}, function (err, item) {
if (err) next(err);
if (!item) {
err = new Error("Item does not exist");
next(err);
}
next();
});
});
module.exports = mongoose.model('OrderItem', OrderItem);
問題は、注文を削除しようとすると、ミドルウェアの事前削除が発生し、console.log に正しい ID が表示されますが、削除しても何も見つかりません (以前は item.remove() で検索しても結果がありませんでした)。
OrderSchema.pre('remove', function(next) {
console.log('order ID:', this._id);
OrderItem.remove({_order: this._id}, next);
});
フィルターなしで見つけた場合、特定の注文のアイテムを含むすべてのアイテムが表示されますが、注文 ID を使用してフィルター処理しようとすると (正しいことを確認しました)、常に空の配列が返されます。
どうも