Mongoose / MongoDB _id 作为字符串

Posted

技术标签:

【中文标题】Mongoose / MongoDB _id 作为字符串【英文标题】:Mongooose / MongoDB _id as String 【发布时间】:2019-03-12 20:30:06 【问题描述】:

我在从 MongoDB 获取数据时遇到了问题。我得到了 ID cannot represent value: _bsontype: "ObjectID", ...

有人说:

将每个模型的_id声明为String的类型

所以它有效,问题消失了,但这样做可以吗?我的意思是,MongoDB 不会为了好玩而将 ID 保存为 objectIds ^^。还是一样,用String代替ObjectID?

【问题讨论】:

不太确定你在哪里声明这个,但猫鼬通常会处理从字符串到 ObjectId 的转换,所以是的,我认为你很好:) 例如: const userSchema = new mongoose.Schema( _id: String, username: type: String, required: true, unique: true -- 谢谢你的回答!:) 你不需要在模式中声明你的_id。这是由猫鼬自动处理的。我的猜测是您遇到的问题出在其他问题上,但需要更多代码才能说出有用的内容。 或者你可以通过_id.toString()将ObjectId转成String 在我的 resolver.js for graphql 我刚刚写了getPost: async (_, args, Post ) => const post = await Post.find(); return posts 来获取所有帖子。 【参考方案1】:

好的,我找到了如何使用 ID 的解决方案。 ID 应该是一个 ObjectID,因为 mongoose 创建了它。所以我使用 GraphQL 并没有注意到,GraphQL 自动将 _id(ObjectID) 解析为 id(String)。

例子:

在 typeDefs.gql 中不要写 _id:ID!,而是写 id:ID!

type Post 
  id: ID!
  title: String!

然后我们把 id 作为一个简单的字符串取出来,问题就解决了。

【讨论】:

以上是关于Mongoose / MongoDB _id 作为字符串的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB、Mongoose 和复合 _id

使用 Mongoose 在投影中包含 Mongodb“_id”字段

使用 Mongoose 在投影中包含 Mongodb“_id”字段

MongoDB、Mongoose 和 Apollo GraphQL 在文档中定义 _id 类型

如何使用 mongoose 在 MongoDB 数组中推送数据

Mongoose 将 _id 更改为 id