ここに私のコードがあります。私は "review.js"と呼ばれる別のファイルにレビュースキーマを持っています。スキーマが正しくインポートされ、エクスポートされているにもかかわらず、まだ「スキーマがコンストラクタではありません」
const express = require('express');
const mongoose = require('mongoose');
const User = require('../model/user');
require('mongoose-currency').loadType(mongoose);
const Currency = mongoose.Types.Currency;
const Schema = mongoose.Schema;
let reviewSchema = new Schema();
reviewSchema.add({
rating: {
type: Number,
min: 1,
max: 5,
defualt: 0
},
howEasyToMake: {
type: Number,
required: true,
min: 1,
max: 5
},
howGoodTaste: {
type: Number,
required: true,
min: 1,
max: 5,
},
wouldMakeAgain: {
type: Number,
required: true,
min: 1,
max: 5,
},
comment: {
type: String,
default: ""
},
postedBy: {
type: String,
required: true,
index: true
},
reviewOf: {
type: String,
required: true,
index: true
},
postersCreationDate: {
type: Number,
required: true
},
chefsCreationDate: {
type: Number,
required: true
},
chefsId: {
type: String,
required: true
}
});
module.exports.reviewSchema = reviewSchema;
recipe.jsと呼ばれる別のファイルがあります。ここでreviewSchemaをインポートし、レシピモデルスキーマの埋め込みスキーマとして使用します。
const express = require('express');
const mongoose = require('mongoose');
const User = require('../model/user');
require('mongoose-currency').loadType(mongoose);
const Currency = mongoose.Types.Currency;
const Schema = mongoose.Schema;
const reviewSchema = require('../model/review').reviewSchema;
let recipeSchema = new Schema({
name: {
type: String,
required: true
},
description: {
type: String,
},
steps: {
type: String,
required: true,
},
ingredients: {
type: Array,
default: ['1', '2', '3', '4']
},
category: {
type: String,
required: true,
index: true
},
postedBy: {
type: String,
required: true,
},
reviewsOfRecipe: [reviewSchema],
numberOfRatings: {
type: Number,
default: 0
},
totalAddedRatings: {
type: Number,
default: 0
},
reviewAverage: {
type: Number,
default: undefined
},
postersCreationDate: {
type: Number,
index: true
},
likedBy: {
type: Array
},
reviewedBy: {
type: Array
}
});
recipeSchema.methods.updateReviewAverage = function(){
let recipe = this;
this.reviewAverage = this.totalAddedRatings/this.numberOfRatings;
};
let Recipe = mongoose.model('Recipe', recipeSchema);
module.exports = Recipe;
私はその後、私のRecipe
文書に埋め込まれreviewsOfRecipes
配列に挿入するために、私はレビューを構築するためにreviewSchema
を使用recipeRouter.js
と呼ばれる別のファイルを持っています。私recipRouter.jsファイルで、私のコードはこれを実行しようとするたび....
Recipe.findOne({名:req.params.name})、その後((レシピ)=> {
let review_ = new reviewSchema({
comment: req.body.comment
rating: req.body.score
});
recipe.reviewsOfRecipe.push(review_);
。
}
...このエラーが発生します。
これまで私がこの問題に遭遇したとき、レシピモデルスキーマと同じファイルにreviewSchemaがありました。それ以来、私は2つをそれぞれのファイルを持つものに分割しました。そして、ファイルにmodule.exports.reviewSchema = reviewSchema;
を正しくエクスポートして、recipe.js
とrecipeRouter.js
ファイルの両方にconst reviewSchema = require('../model/review').reviewSchema;
が含まれていることを確認しました。しかし、まだこの問題は起きている/誰かが問題であるかもしれないことを指摘できるなら、私は非常に感謝するだろう。
あなたはそのようなインスタンスを作成しないでください。代わりに 'recipe.reviewsOfRecipe.push({comment:req.body.comment、rating:req.body.score})'を実行してください。 mongooseのドキュメントのページの一番下にある[sub-docs](http://mongoosejs.com/docs/subdocs.html)を見てください。さらに、 '' $ push'(https: //docs.mongodb.com/manual/reference/operator/update/push/)演算子を使用すると、ドキュメントを取得して配列に追加するのではなく、サーバー上の既存ドキュメントの配列に追加することができます。 –