我正在尝试首次使用网站上的数据库,并且遇到了一些麻烦。我做了一个webDev课程,展示了如何创建一个博客类型的站点,该站点使用cloud9进行所有开发,然后将完整的站点使用MongoDb数据库部署到heroku,一旦将站点放置在heroku上,就使用Mlab托管数据库。
一切工作都很好,但是当数据库仍在cloud9上时,我向数据库中添加了很多集合和文档,而且webDev课程的讲师从未研究如何将数据库移至Mlab。我找到了一些信息,并使用mongodump命令保存了整个数据库,并在mlab上找到了以下代码,我使用了此基本命令将mongodump移至mlab上:
mongorestore -h ds153637.mlab.com:53637 -d nttw_db -c travels -u <user> -p <password> travels.bson
数据库似乎传输良好,并且在heroku上对其进行测试时,我的站点似乎具有在cloud9上创建数据库时最初存储在数据库中的所有数据。现在遇到的问题是,当我在heroku上托管的实时部署站点上将数据库添加到数据库时,数据库条目正在Mlab上以奇数顺序添加到集合中。这是一个博客类型的站点,其中包含远足径和露营地,并进行了评论,因此当我在路径上添加新的测试条目时,新文档是在集合中的第一个条目之后但在其他四个条目之前添加的。通常,我输入的新数据会附加到集合的末尾,至少这是在数据库位于cloud9上时添加条目时的工作方式。这是服务器上我的app.js中用于从我的网站上的表单添加新条目发布的代码:
router.post("/trail_new", isLoggedIn, function(req, res){
var name = req.body.trail.name;
var tags = req.body.trail.tags;
var splash = req.body.trail.splashText;
var thl = req.body.trail.thl || "somewhere on earth.!";
var fees = req.body.trail.fees;
var tl = req.body.trail.tl;
var info = req.body.trail.info;
var body = req.body.trail.body;
var adRight = req.body.trail.adRight || "none";
var photos = req.body.reviewPhoto;
tags = tags.split(",");
//Assemble a variable to send all the review data into the create function for the SCHEMA pattern
var newTrail = { name: name, tags: tags, splashText: splash, thl: thl, fees: fees, tl: tl, info: info, body: body, adRight: adRight, photos: photos };
Trail.create( newTrail, function(err, travel){
if(err){
console.log(err);
res.redirect("trail/new");
}else{
console.log(travel);
res.redirect("/trail");
}
});
});
我确定上面的代码中有一些不太好的行,但是对于将条目添加到数据库中似乎一切正常。关于Mlab如何添加到数据库,我有什么要注意的吗?我不知道为什么在将每个mongodump复制到Mlab之前,在每个集合中的第一个条目之后,然后在所有其他条目之前,将新条目插入db。在cloud9开发环境上运行的mongo版本为v3.6.9,Mlab版本为3.6.6(MMAPv1)。不确定这是否重要。
我真的很讨厌不得不重新创建从cloud9开始的数据库中的所有内容,但是如果我必须擦除数据库并从Mlab重新开始,我可以做到。甚至可能都不是问题,但是让我有些担心的是,新条目没有以正确的顺序放入数据库,并且如果我没有问题,也不希望它以某种方式破坏数据库不知道。
任何信息都会很棒。这是使用数据库的第一次尝试,它们非常酷,但是对于第一次使用它却感到困惑。
谢谢
E
答案 0 :(得分:0)
您需要了解IMO的关键是,在MongoDB中,数据存储为大JSON Blob。从定义上讲,JSON是键值对的一个松散界线。对象的顺序在JSON中无关紧要,您应该牢记这一点。因此,当您将数据转储到C9中并上传到Mlab中时,没人在乎JSON对象的顺序,而且您会发现顺序混乱。将这一点视为使用NOSQL数据库并继续前进的一个小缺点。
P.S您是否参加了Steele的Udemy Bootcamp课程?