是否可以在 Mongoose 中引用 "this" 文档?
Is it possible to refer to "this" document in Mongoose?
我在 Node.js 中使用 Mongoose,我想知道是否可以使用 "this" 或类似机制来引用当前选定的文档。这是我正在寻找的用例:
猫鼬模式:
const mySchema = mongoose.Schema({
position: Number,
date: Number,
lastEventDate: Number
});
假设在某个时间点发生了一个事件。
对于通过其位置选择的文档,我想将 "lastEventDate" 更新为文档的日期。
这是我的梦想代码:
myModel.findOneAndUpdate(
{position: myPosition},
{$set: {
'lastEventDate': THISDOCUMENT.date
}}
);
注意:我在这里使用 $set 是因为实际代码会更新子文档...
是否有内置的 "THISDOCUMENT" 参考,例如我梦寐以求的参考,可以在一个查询中完成所有操作?
或者我是否必须在更新文档之前先查询值(两次查询)。
无法在网上找到任何内容,而且在使用 "this" 方面我还是个新手。
感谢您提供任何帮助!
[编辑 :] 关于 objective 的精度 :
- 我现在的情况是我只有位置 "myPosition" 来识别正确的文档,我想将 "lastEventDate" 设置为与该文档的 "date" 相同的值.
- 我的问题是关于效率的:是否可以在单个上传查询中执行更新?还是我必须先下载 "date" 值,然后再将其上传回 "lastEventDate" 密钥?
收集所有提供的信息,我将冒险寻找一个可能的答案!
您可以尝试类似的方法:
您的架构 JS 文件
const mySchema = mongoose.Schema({
position: Number,
date: Number,
lastEventDate: Number
});
mySchema.methods.doYourThing(){
this.lastEventDate=this.date; //it will set the lastEventDate
}
mongoose.model("myModel", MySchema, "mycollection")
现在,无论何时调用 doYourThing()
,所需的操作都会发生,您在拥有模式实例后调用它。
这是我自己的代码
const token = user.generateJwt(expirationDate); //send a token, it will be stored locally in the browser
它在 return user
实例的函数内部,在模型 User
中,我已经完成了一个名为 generateJwt
的函数,就像我已经展示的那样,我们有这样的东西:
return jwt.sign(
{
_id: this._id, //this is created automatically by Mongo
email: this.email,
name: this.name,
exp: parseInt(expiry.getTime() / 1000, 10), //Includes exp as UNIX time in seconds
level: this.level,
lastLogin: this.lastLogin,
failedLogin: this.failedLogin
},
process.env.JWT_SECRET
); // DO NOT KEEP YOUR SECRET IN THE CODE!
是return用户的所有信息!
请不要犹豫,添加评论和反馈,我不确定这是你想要的,但这就是为什么我理解你的要求。
另一个选项是使用 Virtuals,他们也可以访问 this
。
我在 Node.js 中使用 Mongoose,我想知道是否可以使用 "this" 或类似机制来引用当前选定的文档。这是我正在寻找的用例:
猫鼬模式:
const mySchema = mongoose.Schema({
position: Number,
date: Number,
lastEventDate: Number
});
假设在某个时间点发生了一个事件。 对于通过其位置选择的文档,我想将 "lastEventDate" 更新为文档的日期。 这是我的梦想代码:
myModel.findOneAndUpdate(
{position: myPosition},
{$set: {
'lastEventDate': THISDOCUMENT.date
}}
);
注意:我在这里使用 $set 是因为实际代码会更新子文档...
是否有内置的 "THISDOCUMENT" 参考,例如我梦寐以求的参考,可以在一个查询中完成所有操作? 或者我是否必须在更新文档之前先查询值(两次查询)。
无法在网上找到任何内容,而且在使用 "this" 方面我还是个新手。 感谢您提供任何帮助!
[编辑 :] 关于 objective 的精度 :
- 我现在的情况是我只有位置 "myPosition" 来识别正确的文档,我想将 "lastEventDate" 设置为与该文档的 "date" 相同的值.
- 我的问题是关于效率的:是否可以在单个上传查询中执行更新?还是我必须先下载 "date" 值,然后再将其上传回 "lastEventDate" 密钥?
收集所有提供的信息,我将冒险寻找一个可能的答案!
您可以尝试类似的方法:
您的架构 JS 文件
const mySchema = mongoose.Schema({
position: Number,
date: Number,
lastEventDate: Number
});
mySchema.methods.doYourThing(){
this.lastEventDate=this.date; //it will set the lastEventDate
}
mongoose.model("myModel", MySchema, "mycollection")
现在,无论何时调用 doYourThing()
,所需的操作都会发生,您在拥有模式实例后调用它。
这是我自己的代码
const token = user.generateJwt(expirationDate); //send a token, it will be stored locally in the browser
它在 return user
实例的函数内部,在模型 User
中,我已经完成了一个名为 generateJwt
的函数,就像我已经展示的那样,我们有这样的东西:
return jwt.sign(
{
_id: this._id, //this is created automatically by Mongo
email: this.email,
name: this.name,
exp: parseInt(expiry.getTime() / 1000, 10), //Includes exp as UNIX time in seconds
level: this.level,
lastLogin: this.lastLogin,
failedLogin: this.failedLogin
},
process.env.JWT_SECRET
); // DO NOT KEEP YOUR SECRET IN THE CODE!
是return用户的所有信息!
请不要犹豫,添加评论和反馈,我不确定这是你想要的,但这就是为什么我理解你的要求。
另一个选项是使用 Virtuals,他们也可以访问 this
。