我可以使用此主体创建调查:
{
"name":"name of survey",
"description":"description of survet",
"openAt":"2020-02-12T23:00:00.000Z",
"closeAt":"2020-02-18T23:00:00.000Z",
"questions":[..],
}
服务器从jwt检索用户并将其存储为:
MongoAtlas中的调查文档的屏幕截图(仅用户部分)
现在,如果我使用此正文编辑调查:
{
"createdAt":"2020-02-02T16:12:14.082Z",
"_id":"5e36f4e008caf531ce848954",
"name":"new name",
...
"user":{
"createdAt":"2020-02-02T16:12:14.063Z",
"rank":0,"_id":"5e2f534422b6047e23c7f839",
"_id":"5e2f534422b6047e23c7f839",
...
}
}
我的文档被编辑,_id类型变为String类型,而不是ObjectId
MongoAtlas中的调查文档的屏幕截图(仅用户部分)
现在由于字符串类型(当_id是ObjectId时,它起作用了),该代码不再起作用了
await this.surveyModel.where('user._id').equals(user._id)
我在前端使用Angular 8,在后端使用Nest.js + TypeGoose。
我不知道确切的解决方法,是否应该创建一个将String _id替换为ObjectId的中间件?还是应该在前端中使用ObjectId代替字符串?还是默认情况下,我应该将字符串与TypeGoose一起使用,而不是ObjectId?这些是我认为可以完成的三种解决方案。
答案 0 :(得分:0)
尝试使用id
检索数据。例如,
await this.surveyModel.where('user.id').equals(user.id)
已更新:
var id = parseInt(ObjectId.valueOf(), 16);
还要检查this是否有帮助。
答案 1 :(得分:0)
当使用猫鼬的默认“ _id”时,它应为“ ObjectId”,如果将其存储为字符串,则可以尝试手动设置ID new mongoose.Types.ObjectId("Some24HexString")
也许您可以更新您的问题,以包括如何将其保存到数据库和使用的模型