已将 MongoDb 从 cloud9 复制到 Mlab,新文档以奇数顺序保存到 DB

Copied MongoDb from cloud9 to Mlab and new documents are saved in odd order to DB

我第一次尝试在网站上使用数据库,运行遇到了一些奇怪的事情。我参加了一个 webDev 课程,展示了如何创建一个使用 cloud9 进行所有开发的博客类型站点,然后使用 MongoDb 数据库将完成的站点部署到 heroku,并在您拥有heroku 上的站点。

一切都很好,但是我在数据库还在 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 如何添加到数据库中,有什么我忽略的吗?我不知道为什么在每个集合中的第一个条目之后以及在将 mongo 转储复制到 Mlab 之前所有其他条目之前将新条目插入到数据库中。 mongo 运行ning在cloud9开发环境上的版本是v3.6.9,Mlab版本是3.6.6(MMAPv1)。不确定这是否重要。

我真的不想重新创建我在 cloud9 上时在数据库中创建的所有内容,但是如果我必须擦除数据库并在 Mlab 上重新开始,我可以做到.这甚至可能不是问题,但让我有点担心的是新条目没有以正确的顺序放入数据库,并且不希望它在出现问题时以某种方式破坏数据库不知道。

任何信息都会很棒。这是第一次尝试使用数据库,它们非常酷,但对于初学者来说却很困惑。!

谢谢

E

您需要了解 IMO 的关键是,在 MongoDB 中,数据存储为一个大的 JSON blob。根据定义,JSON 是一个松散的键值对 blob。 JSON 中对象的顺序无关紧要,您应该牢记这一点。因此,当您在 C9 中转储数据并在 Mlab 中上传时,没有人关心 JSON 对象的顺序,您会看到顺序混乱了。将这一点视为使用 NOSQL 数据库的一个小缺点,然后继续。

P.S 你参加过 Steele 的 Udemy Bootcamp 课程吗?