我对播种概念有点陌生。
我的目标是在数据库中拥有一组可以在前端显示的数据。我不想每次启动服务器时都“种子”数据库。我只想添加一组数据。我已经找到了如何为数据库设置种子的方法,但前提是每次启动服务器时都对其进行种子设置。我能正确处理吗?如何只播一次种子?谢谢!服务器启动时,我在app.js中运行seedfoods()
函数。
var mongoose = require("mongoose");
var Food = require("./models/food");
function seedfoods() {
//add the foods to the database
data.forEach(function(seedfoods){
Food.create(seedfoods, function(err, Food){
if(err){
console.log(err)
} else {
console.log("added a food");
}
});
});
}
var data = [
{
name: "Avocados",
easyFood: true,
phase1: true,
about: "Yum Avocados",
},
{
name: "Milk",
easyFood: true,
phase1: true,
about: "Yum Milk",
},
]
module.exports = seedfoods;
答案 0 :(得分:0)
几个选项:
在服务器启动时有一个初始脚本,该脚本运行一次种子并存储这样做的某种记录(例如db条目或文件或类似的东西)。这可能是最干净的,但也是最大的努力。
我建议您这样做:您只需在更新查询中使用upsert选项就可以跳过对现有文档的检测,这只会创建一个新文档(如果尚不存在)。因此,只需使用选项{upsert: true}
进行更新操作就可以开始运行种子。
https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate