猫鼬模式在将对象保存到数据库时丢失了一个数值

时间:2020-06-03 13:59:35

标签: node.js mongoose

猫鼬+ nest.js API出现问题。我这样创建了一个模型:

 const pagesSchema = new mongoose.Schema({
        name: { type: String },
        timeOn: { type: Number},
    });

    const cartItemsSchema = new mongoose.Schema({
        itemName: { type: String },
        itemAction: { type: String },
    });

    const buyedItemsSchema = new mongoose.Schema({
        itemName: { type: String },
        itemQuantity: { type: Number },
    });

    export const SessionSchema = new mongoose.Schema(
    {
        userId: { type: String },
        sessionId: { type: String, required: true },
        userIp: { type: String, required: true },
        visitsCounter: { type: Number },
        visitDate: { type: String },
        device: { type: String },
        browser: { type: String },
        location: { type: String },
        reffer: { type: String },
        pages: [ pagesSchema ],
        cartItems: [ cartItemsSchema ],
        buyedItems: [ buyedItemsSchema ],
        didLogged: { type: Boolean },
        didContacted: { type: Boolean }
    }
    );

    export interface Session extends mongoose.Document {
        userId: string,
        sessionId: string,
        userIp: string,
        visitCounter: number,
        visitDate: string,
        device: string,
        browser: string,
        location: string,
        reffer: string,
        pages: [
            {
                name: string,
                timeOn: number
            }],
        cartItems: [
            {
                itemName: string,
                itemAction: string
            }],
        buyedItems: [
            {
                itemName: string,
                itemQuantity: number
            }],
        didLogged: boolean,
        didContacted: boolean
    }

通过邮政服务将数据发送到数据库:

 @Injectable()
export class SessionsService {
    constructor(@InjectModel('Session') 
    private readonly sessionModel: Model<Session>) {}

    async insertSession(
        sessionId: string, 
        userIp: string,
        visitDate: string, 
        device: string, 
        browser: string, 
        location: string, 
        reffer: string
        ) {     
        let userId: string;
        let visitCounter: number;

        await this.getUserId(userIp).then(
            id => { userId = id as string; }
        );
        await this.getVisitCounter(userIp).then(
            counter => { visitCounter = counter as number; }
        );

        const newSession = new this.sessionModel({
            userId: userId,
            sessionId: sessionId,
            userIp: userIp,
            visitCounter: visitCounter,
            visitDate: visitDate,
            device: device,
            browser: browser,
            location: location,
            reffer: reffer,
            pages: [],
            cartItems: [],
            buyedItems: [],
            didLogged: false,
            didContacted: false,
        });
        console.log(visitCounter);
        console.log(newSession);

        newSession.visitCounter = visitCounter;
        console.log(newSession.visitCounter);
        // w tym momencie gubi mi zmienną visitCounter
        const result = await newSession.save();
        return result.visitCounter;
    };

     private async getUserId(usIp: string): Promise<string> {
         const session = await this.sessionModel.findOne( { userIp: usIp });
        if (!session) return '_' + Math.random().toString(36).substr(2, 9);
        else return session.userId as string;
    };

    private async getVisitCounter(usIp: string): Promise<number> {
        const sessions = await this.sessionModel.find({ userIp: usIp });
        return sessions.length as number;


 @Post()
    async insertSession(
        @Body('sessionId') sessionId: string,
        @Body('userIp') userIp: string,
        @Body('visitDate') visitDate: string,
        @Body('device') device: string,
        @Body('browser') browser: string,
        @Body('location') location: string,
        @Body('reffer') reffer: string
    ) {
        const ssId = await this.sessionsService.insertSession(
            sessionId,
            userIp,
            visitDate,
            device,
            browser,
            location,
            reffer
        );
        return ssId;
    };

但是结果是我得到了没有visitCounter的数据库对象:

{

    _id:5ed7a19817754d55f071b62d,
    userId:"_satr",
    sessionId:"_satr",
    userIp:"11.1111.11",
    visitDate:"12/12/09",
    device:"desktop",
    browser:"chrome",
    location:"portugal",
    reffer:"none",
    pages:Array,
    cartItems:Array,
    buyedItems:Array,
    didLogged:false,
    didContacted:false,
    __v:0
    }

结果是我在数据库中获得了发布数据,但是保存功能丢失了我的visitCounter值。 console.log打印出visitCounter存在于项目中,但不存在于模式中。为什么在用猫鼬将对象保存到数据库时,我得到了除visitCounter之外的所有数据?

0 个答案:

没有答案
相关问题