ObjectId替换为String,所以我无法检索文档

时间:2020-02-02 16:44:16

标签: angular mongodb nestjs typegoose

我可以使用此主体创建调查:

{
  "name":"name of survey",
  "description":"description of survet",
  "openAt":"2020-02-12T23:00:00.000Z",
  "closeAt":"2020-02-18T23:00:00.000Z",
  "questions":[..],
}

服务器从jwt检索用户并将其存储为:

Screenshot of MongoAtlas document

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

enter image description here

MongoAtlas中的调查文档的屏幕截图(仅用户部分)

现在由于字符串类型(当_id是ObjectId时,它起作用了),该代码不再起作用了

await this.surveyModel.where('user._id').equals(user._id)

我在前端使用Angular 8,在后端使用Nest.js + TypeGoose。

我不知道确切的解决方法,是否应该创建一个将String _id替换为ObjectId的中间件?还是应该在前端中使用ObjectId代替字符串?还是默认情况下,我应该将字符串与TypeGoose一起使用,而不是ObjectId?这些是我认为可以完成的三种解决方案。

2 个答案:

答案 0 :(得分:0)

尝试使用id检索数据。例如,

await this.surveyModel.where('user.id').equals(user.id)

已更新:

var id = parseInt(ObjectId.valueOf(), 16);

参考:Documentation

还要检查this是否有帮助。

答案 1 :(得分:0)

当使用猫鼬的默认“ _id”时,它应为“ ObjectId”,如果将其存储为字符串,则可以尝试手动设置ID new mongoose.Types.ObjectId("Some24HexString")

也许您可以更新您的问题,以包括如何将其保存到数据库和使用的模型