创建一个引用集合的 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 的文档的主要内容,如果未能解决你的问题,请参考以下文章