2
私は何時までもこの問題を解決するために何時間も持っています。私は助けにならない初心者です。以下は、コマンドライン(ウィンドウ)からシードを実行した後のJSON出力です。以下はMongoDBデータベースを「null」を取得せずにシードする方法
{
"_id":"57f4fc5adf7e1109b08660d4",
"companyName":"Flat Iron",
"contactName":"Phil",
"userName":"Hook",
"email":"[email protected]",
"phone":"12345678910",
"image":"url6",
"meals":[
{
"_id":"57f4fc5adf7e1109b08660d1",
"name":"Burger and chips",
"upvotes":5,
"downvotes":20,
"price":16,
"official":true,
"__v":0,
"images":[
"google.com/url3"
],
"ingredients":[
"egg",
"water",
"GF dough",
"beef"
],
"suitable_for":[
"fodmap"
],
"add_for_taste":[
"asoefida",
"orange",
"pineapple"
],
"remove_for_safe":[
"garlic",
"wheat"
],
"favourited_by":[
null
]
}
],
"locations":[
"NW16BG",
"EN41RT"
],
"caters_for":[
"scd",
"paleo",
"fodmap"
]
}
]
私の種子ファイルです。上から、 'favourited_by'はnullを返しますが、正しい数のオブジェクト(または 'null')を取得することがわかります。
var mongoose = require("mongoose");
var databaseURL = 'mongodb://localhost:27017/tda';
mongoose.connect(databaseURL);
// var Project = require("../models/project");
var User = require("../models/user");
var Vendor = require("../models/vendor");
var Meal = require("../models/meal");
// This will clear what ever we have in the database :)
User.collection.drop();
Vendor.collection.drop();
Meal.collection.drop();
var meal1 = new Meal({
name: "Nice Meal",
upvotes: 15,
downvotes: 3,
vendor: "Flat Iron",
favourited_by: [user1, user2],
price: 12,
remove_for_safe: ["onions", "cheese"],
add_for_taste: ["carrots"],
suitable_for: ["paleo", "fodmap", "SCD"],
ingredients: ["egg", "water", "cress"],
images: ["google.com/url"],
official: true
})
var meal2 = new Meal({
name: "Good meal",
upvotes: 35,
downvotes: 23,
vendor: "McDonalds",
favourited_by: [user1, user2, user3],
price: 6,
remove_for_safe: ["onions", "gherkins"],
add_for_taste: ["carrots", "peas", "water"],
suitable_for: ["paleo", "fodmap"],
ingredients: ["egg", "water", "GF Bread", "burger"],
images: ["google.com/url2"],
official: false
})
var meal3 = new Meal({
name: "Burger and chips",
upvotes: 5,
downvotes: 20,
vendor: "Reds True BBQ",
favourited_by: [user3],
price: 16,
remove_for_safe: ["garlic", "wheat"],
add_for_taste: ["asoefida", "orange", "pineapple"],
suitable_for: ["fodmap"],
ingredients: ["egg", "water", "GF dough", "beef"],
images: ["google.com/url3"],
official: true
})
var vendor1 = new Vendor({
companyName: "Reds",
contactName: "Butch",
userName: "Hook",
email: "[email protected]",
phone: "12345678910",
image: "url4",
caters_for: ["scd", "paleo", "fodmap"],
locations: ["N213BQ", "EN41RT"],
meals: [meal1, meal2]
})
var vendor2 = new Vendor({
companyName: "McDonalds",
contactName: "Tim Applebee",
userName: "TimA",
email: "[email protected]",
phone: "12345678910",
image: "url5",
caters_for: ["scd", "paleo", "fodmap"],
locations: ["N15TG", "EC41RT"],
meals: [meal2]
})
var vendor3 = new Vendor({
companyName: "Flat Iron",
contactName: "Phil",
userName: "Hook",
email: "[email protected]",
phone: "12345678910",
image: "url6",
caters_for: ["scd", "paleo", "fodmap"],
locations: ["NW16BG", "EN41RT"],
meals: [meal3]
})
var user1 = new User({
firstName: "Mick",
lastName: "Fry",
userName: "Mike",
email: "[email protected]",
diet: "fodmap",
location: "London",
profile_photo: "imageurl",
saved_meals: [meal1, meal2],
saved_vendors: [vendor1]
})
var user2 = new User({
firstName: "Tom",
lastName: "Scott",
userName: "tascott",
email: "[email protected]",
diet: "fodmap",
location: "Leeds",
profile_photo: "imageurl2",
saved_meals: [meal1, meal3],
saved_vendors: [vendor1]
})
var user3 = new User({
firstName: "Phil",
lastName: "Croy",
userName: "Croa",
email: "[email protected]",
diet: "SCD",
location: "London",
profile_photo: "imageurl3",
saved_meals: [meal3],
saved_vendors: [vendor1, vendor2, vendor3]
})
// Save the users
user1.save(function(err, user) {
if (err) return console.log(err);
console.log("User saved! ", user);
})
user2.save(function(err, user) {
if (err) return console.log(err);
console.log("User saved! ", user);
})
user3.save(function(err, user) {
if (err) return console.log(err);
console.log("User saved! ", user);
})
// Save the Vendors
vendor1.save(function(err, vendor) {
if (err) return console.log(err);
console.log("Vendor saved! ", vendor);
})
vendor2.save(function(err, vendor) {
if (err) return console.log(err);
console.log("Vendor saved! ", vendor);
})
vendor3.save(function(err, vendor) {
if (err) return console.log(err);
console.log("Vendor saved! ", vendor);
})
meal1.save(function(err, meal) {
if (err) return console.log(err);
console.log("Meal saved! ", meal);
})
meal2.save(function(err, meal) {
if (err) return console.log(err);
console.log("Meal saved! ", meal);
})
meal3.save(function(err, meal) {
if (err) return console.log(err);
console.log("Meal saved! ", meal);
})
私は「favourited_by」は種子のファイルで最後に定義されている「ユーザー」を埋め込まれているので、それがある印象でいます。したがって、シードを実行すると、ユーザーにデータを入力しようとしますが、データはまだ表示されません。
誰かがこれを回避する方法をお手伝いできますか?
これを前に追加しました//ユーザを一番下に保存します。最大コールスタックサイズ:私はノードのdb /シーズを実行したときに meal1.favourited_by = [ユーザー1、ユーザー2] meal2.favourited_by = [ユーザー1、ユーザー2、ユーザー3] meal3.favourited_by = [USER3] は、しかし、今私は、」例外RangeErrorを取得します超過した " – TaScott
ああ、私はそれが来るのを見なかった。私は、あなたが "meal1.favourited_by = [user1]"のような循環的な割り当てを持っていて、ユーザが "user1.meals = [meal1]"のようなものを持っているので、これが起こったと思います。両方の方法で保管する必要がある場合は、文書のIDのみを保管してください。回答を更新して – andresk
に更新します。少なくとも、IDでデータを入力してnullにならないようにしています。ありがとう! – TaScott