Mongooose / MongoDB _id как строка

У меня возникла проблема с получением данных из MongoDB. Получил
ID cannot represent value: { _bsontype: "ObjectID", ... }

Кто-то сказал:

declare the _id of each model to the type of String

Итак, это работает, проблема исчезла, но можно ли так делать? Я имею в виду, что MongoDB не будет сохранять идентификаторы в виде идентификаторов объектов для развлечения ^^. Или то же самое - использовать String вместо ObjectID?

Не совсем уверен, где вы это объявляете, но мангуст обычно обрабатывает преобразование из строки в ObjectId, так что да, я думаю, вы в порядке :)

Imre_G 08.10.2018 10:22

например: const userSchema = new mongoose.Schema ({_id: String, username: {type: String, required: true, unique: true}} - И спасибо за ответ! :)

Christopher Schönfeldt 08.10.2018 10:25

Вам не нужно объявлять свой _id в схеме. Мангуст обрабатывает это автоматически. Я предполагаю, что проблема, с которой вы столкнулись, заключалась в другом, но вам нужно больше кода, чтобы сказать что-то полезное.

Imre_G 08.10.2018 10:28

или вы можете передать ObjectId в String с помощью _id.toString()

masongzhi 08.10.2018 10:38

в моем resolver.js для graphql я только что написал getPost: async (_, args, { Post }) =>{ const post = await Post.find({}); return posts}, чтобы получить все сообщения.

Christopher Schönfeldt 08.10.2018 10:51

Попробуйте зарегистрировать post, прежде чем отправлять его обратно, потому что эта часть должна работать нормально.

Imre_G 08.10.2018 11:01
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
6
937
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Окей Я нашел решение как работать с ID. Идентификатор должен быть ObjectID, поскольку мангуст создает его. Итак, я работаю с GraphQL и не заметил, что GraphQL автоматически анализирует _id (ObjectID) на id (String).

Пример:

В typeDefs.gql не пишите _id: ID !, вместо этого пишите id: ID!

type Post {
  id: ID!
  title: String!
}

Затем мы получаем id в виде простой строки, и проблема исчезает.

Другие вопросы по теме