0

我可以用这个机构创建一个调查:

{
  "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 文档截图

MongoAtlas 中的 Survey 文档截图(仅限用户部分)

现在,如果我用这个身体编辑我的调查:

{
  "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 中的 Survey 文档截图(仅限用户部分)

现在,由于字符串类型,此代码不再起作用(当 _id 为 ObjectId 时,它确实起作用)

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

我将 Angular 8 用于前端,将 Nest.js + TypeGoose 用于后端。

我不知道如何解决这个问题,我是否应该创建一个将 String _id 替换为 ObjectId 的中间件?或者我应该在我的前端使用 ObjectId 而不是 string ?或者我应该默认使用字符串 TypeGoose 而不是 ObjectId ?这些是我想象的 3 个解决方案。

4

2 回答 2

0

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

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

于 2020-03-03T16:13:57.483 回答
0

尝试使用id. 例如,

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

更新:

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

参考:文档

还要检查是否有帮助。

于 2020-02-02T17:41:10.367 回答