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 作为字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mongoose 在投影中包含 Mongodb“_id”字段
使用 Mongoose 在投影中包含 Mongodb“_id”字段
MongoDB、Mongoose 和 Apollo GraphQL 在文档中定义 _id 类型