node.js - Mongoose 模式在将对象保存到数据库时丢失了一个数值
问题描述
我对 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
}
使用 post 服务将数据发送到数据库:
@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
s 打印visitCounter
存在于项目中,但不存在于模式中。为什么在通过猫鼬将对象保存到数据库时,我得到了除了visitCounter
保存之外的所有数据?
解决方案
推荐阅读
- javascript - 如何让 window.crypto.subtle 输出与“crypto”js 库相同的签名?
- python - Selenium TypeError:“WebElement”对象不可调用
- javascript - 如何制作一个居中但响应式的 html 导航栏
- java - 用鼠标在图像上绘画和擦除
- c# - 问 - 如何添加多个列表
列出 具有特定名称 - shell - "$*" 的赋值
- python - 在 Google Vision API 上对多个 PDF 执行文本检测
- javascript - AXIOS POST 返回结果
- javascript - 在 vue 中使用来自 vuex 状态的数据填充输入字段
- php - 如何在php中邮寄创建的pdf?