0

私は他の多くのモデルで同じようなことをしていますが、このモデルでは機能していません。誰かが間違いを見ることができますか?

注文スキーマ:

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 を使用してフィルター処理しようとすると (正しいことを確認しました)、常に空の配列が返されます。

どうも

4

0 に答える 0