如何种子MongoDB数据库,而不会得到“空”

我有好几个小时find一个解决scheme,没有运气。 我是一个没有帮助的初学者。 以下是从命令行(windows)运行种子后的JSON输出。

{ "_id":"57f4fc5adf7e1109b08660d4", "companyName":"Flat Iron", "contactName":"Phil", "userName":"Hook", "email":"bill@reds", "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,但是获得了正确数量的对象(或者'nulls')。

 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: "greg@greg.com", 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: "tim@mcds.com", 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: "bill@reds", 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: "mike@mike.com", 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: "scott@scott.com", 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: "paul@paul.com", 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'embedded了最后在种子文件中定义的'用户'。 所以当运行种子时,它试图填充用户,但还没有看到数据。

任何人都可以帮助解决这个问题吗?

是的,当你设置favourited_by用户是未定义的,这是因为他们被保存为空。 设置用户后,您可以尝试更新膳食:

 meal1.favourited_by = [user1._id, user2._id] 

你也可以从饭食初始化中删除。