【发布时间】:2019-06-25 13:31:21
【问题描述】:
我第一次尝试在网站上使用数据库并遇到了一些奇怪的事情。我做了一个 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 上以奇数顺序添加到集合中。这是一个博客类型的网站,其中包含远足小径和露营地以及对装备的评论,因此当我向小径添加新的测试条目时,新文档是在集合中的第一个条目之后添加的,但在其他 4 个条目之前添加。通常我输入的新数据会附加到集合的末尾,至少当数据库在 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 之前都存在的其他条目之前将新条目插入到数据库中。在cloud9开发环境上运行的mongo版本是v3.6.9,Mlab版本是3.6.6(MMAPv1)。不确定这是否重要。
我真的很不想重新创建我在 cloud9 上时已经在数据库中创建的所有内容,但是如果我必须擦除数据库并在 Mlab 上重新开始,我可以做到。它甚至可能不是问题,但它让我有点担心,新条目没有以正确的顺序放入数据库中,并且不希望它以某种方式破坏数据库,如果有我不知道的问题不知道。
任何信息都会很棒。这是使用数据库的第一次尝试,它们非常酷,但对于初学者来说却很困惑。!
谢谢
E
【问题讨论】:
-
除非您指定明确的排序顺序(或使用上限集合),否则无法保证文档的返回顺序。您没有包含显示如何查找条目的代码 sn-p,但应该包含
sort()标准。如果没有排序标准,自然顺序可能会巧合地显示为插入顺序,但绝对不能保证在文档被修改或删除时保持不变。
标签: node.js database mongodb heroku mlab