猫鼬+ 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
之外的所有数据?