猫鼬模式中的对象数组问题

Posted

技术标签:

【中文标题】猫鼬模式中的对象数组问题【英文标题】:Problem with array of objects in mongoose schema 【发布时间】:2019-08-21 20:16:58 【问题描述】:

我对基于 node express 的 rest api 和 mongodb 的 mongoose 有问题我认为我对嵌套对象数组的 mongoose 模式有问题

我尝试了控制台日志 req.body 并且有数据,但是当我使用新的 mongoose 架构时,会有空数组

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const TranslationSchema = new Schema(
    name: 
        type: String,
        required:true
        ,
    description: 
        type: String
    ,
    laguage_code: 
        type: String,
        required:true
    ,
)

const ImagesSchema = new Schema(
    name:
        type: String
    ,
    file_id: 
        type: String
    
)
const RecipeSchema = new Schema(
    user: 
        type: Schema.Types.ObjectId,
        ref: 'users'
    ,
    translations:[TranslationSchema],
    date: 
        type: Date,
        default: Date.now
    ,
    images:[ImagesSchema]
)
module.exports = Recipe = mongoose.model("recipes", RecipeSchema);

和api

router.post(
    '/',
    passport.authenticate('jwt',  session:false ),
    (req,res) => 
        const newRecipe = new Recipe(
            user: req.user.id,
            translations:req.body.translations,
            images:req.body.images
        )
        console.log(req.body)
        console.log(newRecipe)
        // newRecipe.save().then(recipe => res.json(recipe))
    
)

console.log req.body 我有

[Object: null prototype] 
  images: '[name:\'test\', file_id:\'asd\']',
  translations: '[name:\'asd\', laguage_code:\'pl\']' 

但是在 console.log(newRecipe)

 _id: 5ca0cc632314cd4368bf42dd,
  user: 5c569f603e811118c83c80d1,
  translations: [],
  date: 2019-03-31T14:19:15.788Z,
  images: [] 

我做错了什么?

【问题讨论】:

images: '[name:\'test\', file_id:\'asd\']', 这是一个“字符串”而不是数组。这确实是发送 POST 请求发送格式错误数据的问题。请注意,您甚至不能JSON.parse() this,因为键没有正确引用。最好检查提交数据的来源。正确提交时,console.log(JSON.stringify(req.body, undefined, 2)) 的结果应该看起来像 images: [ name: 'test', file_id: 'asd' ]' 【参考方案1】:

在您的Recipe 模型中,您也将translationsimages 定义为猫鼬模型。所以尝试导出这些模型并构建它们。例如:

const translations = new Translation(req.body.translations);
const images = new Image(req.body.images);

然后尝试以这种方式创建模型:

const newRecipe = new Recipe(
    user: req.user.id,
    translations:translations,
    images:images
)

我希望我能告诉你如何尝试找到你的解决方案。

【讨论】:

以上是关于猫鼬模式中的对象数组问题的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬从模型中的数组中查找对象

创建包含对象数组的猫鼬模式

如何更新猫鼬模式中另一个数组内的数组内的对象?

如何使用对象数组创建猫鼬模式

为动态填充的对象数组生成猫鼬模式

如何将json对象数组保存到猫鼬?