创建一个引用集合的 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 集合进行分组?

findOne 返回完整文档

如何使用 Mongoose 将文档插入只有一个 ObjectID 的集合中?

如何将子文档数组的 ObjectId 引用到另一个模型