种子MongoDB数据-仅一次?

时间:2019-01-24 11:50:12

标签: node.js database mongodb express mongoose

我对播种概念有点陌生。

我的目标是在数据库中拥有一组可以在前端显示的数据。我不想每次启动服务器时都“种子”数据库。我只想添加一组数据。我已经找到了如何为数据库设置种子的方法,但前提是每次启动服务器时都对其进行种子设置。我能正确处理吗?如何只播一次种子?谢谢!服务器启动时,我在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;

1 个答案:

答案 0 :(得分:0)

几个选项:

在服务器启动时有一个初始脚本,该脚本运行一次种子并存储这样做的某种记录(例如db条目或文件或类似的东西)。这可能是最干净的,但也是最大的努力。

我建议您这样做:您只需在更新查询中使用upsert选项就可以跳过对现有文档的检测,这只会创建一个新文档(如果尚不存在)。因此,只需使用选项{upsert: true}进行更新操作就可以开始运行种子。

https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate