创建一个引用集合的 ObjectId 的文档
Posted
技术标签:
【中文标题】创建一个引用集合的 ObjectId 的文档【英文标题】:Create a document that references a collection's ObjectId 【发布时间】:2018-05-05 16:22:19 【问题描述】:有一个从用户架构中引用 ObjectId 的 postSchema:
var postSchema = new Schema(
text: type: String, required: true, maxlength: 140 ,
_creator: type: mongoose.Schema.ObjectId, ref: 'User', required: true ,
);
在我的 postController 中,创建新 Post 时如何设置 _creator 属性?:
exports.postCreatePost = function(req, res, next)
console.log(req.body);
var newPost = new Post(
text: req.body.text,
_creator: req.body.User._id // What is this supposed to be in order to reference User's ObjectId?
);
newPost.save(function(err, newPost)
res.status(200).json(newPost);
);
在尝试使用 Postman 为现有用户使用该 ObjectId 发布此 JSON 时收到“位置 30 处 JSON 中出现意外字符串”错误:
"text": "first test post"
"_creator": "5a13b3c695fcb47ea5c71308"
【问题讨论】:
【参考方案1】:这里你的 postSchema 应该是这样的,
var postSchema = new Schema(
text: type: String, required: true, maxlength: 140 ,
_creator: type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true ,
);
_creator
属性的类型应为mongoose.Schema.Types.ObjectId
【讨论】:
已将属性更改为此,但仍然收到相同的错误。 你能分享你的 req.body 吗? 这就是我通过邮递员发送的内容: "text": "first test post" "_creator": "5a13b3c695fcb47ea5c71308"
哦,但是当您执行 console.log(req.body) 时,它会打印什么?
它没有到达那个日志语句。我的终端正在打印 Running on port 3000... POST /newpost 400 22.880 ms - 1164 SyntaxError: Unexpected string in JSON at position 30
... 但是,如果我将架构更改为仅具有 text 属性,则可以创建帖子。所以我知道至少不是我的路由出错了。以上是关于创建一个引用集合的 ObjectId 的文档的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose 存储另一个集合的 ObjectId 的引用
如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?
如何根据从 objectId 中提取的创建日期对 MongoDB 集合进行分组?