ObjectId заменен на String, поэтому я не могу получить документ - PullRequest
0 голосов
/ 02 февраля 2020

Я могу создать опрос с этим телом:

{
  "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

снимок экрана с документом Survey в 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 тип становится Строковым типом вместо ObjectId

enter image description here

снимок экрана документа Survey в MongoAtlas (только пользовательская часть)

Теперь этот код больше не работает из-за строкового типа (когда _id - ObjectId, он работает)

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

Я использую Angular 8 для интерфейса и Nest . js + Введите Goose для серверной части.

Я не знаю точно, как это исправить, могу ли я создать промежуточное программное обеспечение, которое заменит String _id на ObjectId? Или я должен использовать ObjectId в моем интерфейсе вместо строки? Или я должен использовать строку по умолчанию с типом Goose вместо ObjectId? Тезисы - это 3 решения, которые, я думаю, сработают.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Когда вы используете "_id" по умолчанию из mon goose, это должен быть "ObjectId", и если он сохраняет его как строку, возможно, попытайтесь установить идентификатор вручную new mongoose.Types.ObjectId("Some24HexString")

Возможно, вы могли бы обновите свой вопрос, чтобы включить вопрос о том, как сохранить его в базу данных и используемую модель

0 голосов
/ 02 февраля 2020

Попробуйте получить данные с помощью id. Например,

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

Обновлено:

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

Ссылка: Документация

Также проверьте, помогает ли это .

...