Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 当调用仅用于保存操作的Typegoose时,挂钩在updateOne上不起作用_Mongodb_Typescript_Mongoose_Typegoose - Fatal编程技术网

Mongodb 当调用仅用于保存操作的Typegoose时,挂钩在updateOne上不起作用

Mongodb 当调用仅用于保存操作的Typegoose时,挂钩在updateOne上不起作用,mongodb,typescript,mongoose,typegoose,Mongodb,Typescript,Mongoose,Typegoose,我已经创建了这个,并且一直在使用这个模型。但是现在我添加了@pre(“save”),因为我想在保存之前对数据进行一些检查,并相应地调整值 我的问题是,当我首先进行更新时,控制台日志从未得到输出。然后,如果我发布isOfferLive:true,我就永远无法设置this.isOfferLive=false;,因此永远不会调用pre 我在想什么 我正在使用 "reflect-metadata": "^0.1.13", "typegoose": "^5.7.2", "mongo

我已经创建了这个,并且一直在使用这个模型。但是现在我添加了
@pre(“save”
),因为我想在保存之前对数据进行一些检查,并相应地调整值

我的问题是,当我首先进行更新时,控制台日志从未得到输出。然后,如果我发布
isOfferLive:true
,我就永远无法设置
this.isOfferLive=false;
,因此永远不会调用
pre

我在想什么

我正在使用

    "reflect-metadata": "^0.1.13",
    "typegoose": "^5.7.2",
    "mongoose": "^5.6.3",
emitDecoratorMetadata and experimentalDecorators are be enabled in tsconfig.json

我注意到的一件事是,当查看consoe日志时,
钩子
Model.create
上被调用,而不是在
Model.updateOne上被调用

我如何让他们也在更新上工作

我的班级

@pre<Offer>("save", function(next: HookNextFunction) {
  console.log("[**** save]: " + this.isOfferLive);
  this.isOfferLive = false;
  if (!isOfferValid(this)) {
    this.isOfferLive = false;
  }
  next();
})
export class Offer extends Typegoose {
  @prop({ required: true, default: false })
  public isOfferLive: boolean;
}

export const Model = new Offer().getModelForClass(Offer);
@pre(“保存”,函数(下一步:HookNextFunction){
console.log(“[****保存]:”+this.isOfferLive);
this.isOfferLive=false;
如果(!IsoferValid(本)){
this.isOfferLive=false;
}
next();
})
出口类优惠扩展到出口类{
@prop({required:true,default:false})
公共活动:布尔值;
}
export const Model=new Offer().getModelForClass(Offer);

更新:找到了一种方法来更新它,但它没有文档记录&我不推荐它!:

import * as mongoose from "mongoose";
import { pre, prop, Typegoose } from "./typegoose/src/typegoose";

@pre<Offer>("updateOne", function(this: mongoose.Query<any>) {
    // @ts-ignore
    this._update.isOfferLive = true;
    return;
})
class Offer extends Typegoose {
    @prop({ required: true, default: false })
    public isOfferLive: boolean;
}
const OfferModel = new Offer().getModelForClass(Offer);

(async () => {
    mongoose.set("debug", true);
    await mongoose.connect(`mongodb://mongodb:27017/`, {
        useNewUrlParser: true,
        useFindAndModify: true,
        useCreateIndex: true,
        dbName: "verify315",
        user: "user",
        pass: "passwd",
        authSource: "admin",
        autoIndex: true
    });

    const dummy = new OfferModel();
    await dummy.save();

    await dummy.updateOne(dummy).exec();

    const dummyback = await OfferModel.findById(dummy._id).exec(); // re-fetch because otherwise it does not load the changes
    console.log("after updateOne:", dummyback);

    await mongoose.disconnect();
})();
import*作为“猫鼬”中的猫鼬;
从“/Typegoose/src/Typegoose”导入{pre,prop,Typegoose}”;
@pre(“updateOne”,函数(this:mongoose.Query){
//@ts忽略
这是。_update.isOfferLive=true;
返回;
})
课堂活动延长了课堂时间{
@prop({required:true,default:false})
公共活动:布尔值;
}
const OfferModel=new Offer().getModelForClass(Offer);
(异步()=>{
mongoose.set(“调试”,true);
等待猫鼬(`mongodb://mongodb:27017/`, {
useNewUrlParser:true,
UseFindModify:true,
useCreateIndex:true,
dbName:“verify315”,
用户:“用户”,
通行证:“通行证”,
authSource:“管理员”,
自动索引:true
});
const dummy=new OfferModel();
等待dummy.save();
等待dummy.updateOne(dummy.exec();
const dummyback=await OfferModel.findById(dummy._id).exec();//重新获取,否则不会加载更改
log(“更新后:”,dummyback);
等待猫鼬。断开连接();
})();

更新:找到了一种方法来更新它,但它没有文档记录&我不推荐它!:

import * as mongoose from "mongoose";
import { pre, prop, Typegoose } from "./typegoose/src/typegoose";

@pre<Offer>("updateOne", function(this: mongoose.Query<any>) {
    // @ts-ignore
    this._update.isOfferLive = true;
    return;
})
class Offer extends Typegoose {
    @prop({ required: true, default: false })
    public isOfferLive: boolean;
}
const OfferModel = new Offer().getModelForClass(Offer);

(async () => {
    mongoose.set("debug", true);
    await mongoose.connect(`mongodb://mongodb:27017/`, {
        useNewUrlParser: true,
        useFindAndModify: true,
        useCreateIndex: true,
        dbName: "verify315",
        user: "user",
        pass: "passwd",
        authSource: "admin",
        autoIndex: true
    });

    const dummy = new OfferModel();
    await dummy.save();

    await dummy.updateOne(dummy).exec();

    const dummyback = await OfferModel.findById(dummy._id).exec(); // re-fetch because otherwise it does not load the changes
    console.log("after updateOne:", dummyback);

    await mongoose.disconnect();
})();
import*作为“猫鼬”中的猫鼬;
从“/Typegoose/src/Typegoose”导入{pre,prop,Typegoose}”;
@pre(“updateOne”,函数(this:mongoose.Query){
//@ts忽略
这是。_update.isOfferLive=true;
返回;
})
课堂活动延长了课堂时间{
@prop({required:true,default:false})
公共活动:布尔值;
}
const OfferModel=new Offer().getModelForClass(Offer);
(异步()=>{
mongoose.set(“调试”,true);
等待猫鼬(`mongodb://mongodb:27017/`, {
useNewUrlParser:true,
UseFindModify:true,
useCreateIndex:true,
dbName:“verify315”,
用户:“用户”,
通行证:“通行证”,
authSource:“管理员”,
自动索引:true
});
const dummy=new OfferModel();
等待dummy.save();
等待dummy.updateOne(dummy.exec();
const dummyback=await OfferModel.findById(dummy._id).exec();//重新获取,否则不会加载更改
log(“更新后:”,dummyback);
等待猫鼬。断开连接();
})();