创建新模式对象后,Mongoose 引用的字段丢失

Posted

技术标签:

【中文标题】创建新模式对象后,Mongoose 引用的字段丢失【英文标题】:Mongoose referenced field missing after making a new schema object 【发布时间】:2017-05-19 07:59:07 【问题描述】:

我正在使用 mongoDB 和 NodeJS 使用 mongoose 包,尝试将对象保存到 DB,其中一个字段丢失...检查了所有内容。

问题:我不知道为什么会这样,我有每个字段,因为它应该根据问题模式保存到数据库中。对于某些方式,当我生成一个新的问题架构对象并将请求的详细信息应用到它时,除了引用的字段(主题)之外的每个字段都适用于新的问题架构。我在这里遗漏了什么吗,我在新问题对象之前检查了所有字段都很好,包括引用的字段 - 显示主题的正确 ID。

我有这个主题架构:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var Question = require("./Question.js");

var topic_schema = Schema(  
    name: type: String, required: true,
    questions: [ type: Schema.Types.ObjectId, ref: 'Question']
);

module.exports = mongoose.model('Topic', topic_schema);

我有这个问题架构:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var Topic = require("./Topic.js");

var question_schema = Schema(
    syntax: type: String, required: true,
    answer: type: String, required: true,
    topic: [ type: Schema.Types.ObjectId, ref: 'Topic' ]
);

module.exports = mongoose.model('Question', question_schema);

我正在尝试在这条路线中保存一个问题:

app.post('/addque', function (req,res)
  // Getting the details from the client request
  var question_details = req.body.question_details;

  // Getting the id's of the topics
  Topic.find(name: "$in": question_details.topics).select('_id').exec(function (err, topics)
    if (err) return console.error(err);

    // Apply the id's to the question_details
    question_details.topics = topics;

    // ~~~~~~~~~~Generate new questions object~~~~~~~~~ topic array does not apply here
    var question_to_save = question_details;

    //Save it to the DB
    question_details.save(function(err, saved_question) 
      if (err) return console.error(err);
    );
  );
);

谢谢你帮助我!

【问题讨论】:

【参考方案1】:

question_schema 中的topic 看起来应该是复数,topics

我也看不到 question_to_save 在任何地方使用。

【讨论】:

不敢相信我在架构“主题”中犯了这个拼写错误应该是主题。至于 question_to_save 似乎我复制了我的代码中没有我的部分的最后一个版本制作新的对象架构.. 感谢您的关注! 不用担心,很乐意为您提供帮助。 :)

以上是关于创建新模式对象后,Mongoose 引用的字段丢失的主要内容,如果未能解决你的问题,请参考以下文章

如何在nestjs mongoose typescript中引用嵌套文档

Mocha MongoDB Mongoose ObjectId ref 在第一个“it”语句后消失

设计模式三 原型模式

Mongoose:在设置值后,新创建的对象上的值转换为 ObjectId 失败 [重复]

Mongoose:在设置值后,新创建的对象上的值转换为 ObjectId 失败 [重复]

利用Mongoose来结构化模式与验证