MongoDB引用Json文件数据,看完之后不要再踩坑啦~

(一) 数据库数据的流通

    分配好工作内容之后,我们最先开始的就是页面的搭建、数据库的设计以及搭建。而面临的第一个数据如何在团队中流通共享的问题,有两种办法:

    1、将数据写在Json文件中,通过将Json文件引入本地数据库的方式拿到与组中与其他成员一样的数据。

    2、比较明智的做法,是在其中的某一台电脑录入完整的数据,再把这台电脑当做组内的服务器,让其他组员访问这台电脑的数据,达到数据共享的的目的。

 

(二) 数据库的对应关系

    我们小组使用的是第二种办法,即Json文件导入本地数据库,然后也顺利地踩了个雷。

    第一天上午,在修改好项目的页面之后,我就开始尝试去调取数据库的数据。将其他成员写好的Json文件引入到我的电脑的方法如下:

1、找到Json文件的所在目录(绝对路径);

2、在命令行输入以下命令。

mongoimport -d library -c books --file C:\

mongodb 查询返回json数据 mongodb查询json里面的值_数据

 

 

说明:

-d/-db,-d为缩写,空格之后写上数据库的名称;

-c/-collection,-c为缩写,空格之后写上集合名称;

--file/--f,空格之后写上Json文件的绝对路径(包含文件名)

 

注意:

  该命令不能保证百分百成功,如果出现错误,应该首先检查拼写,其次可以切换缩写或全写进行多次尝试!

显示connected to db 之后表示引入数据成功,这时候查看数据库:

mongodb 查询返回json数据 mongodb查询json里面的值_数据_02

 

 

    确认数据引入成功,接下来开始尝试去使用这些数据。

    尝试之后发现我的前端页面其实并没有获取到数据,好吧,老老实实排查问题:

可能性1:读取数据的语法有误?

    语法错误是应该第一时间排查的,检查一遍,语法没有问题,进行下一步排查。

可能性2:读取数据位置有误?

    读取不到数据,也可能是我读取数据位置不正确,所以我开始着重检查这一部分的代码,果然发现了一点问题:在连接MongoDB的js文件中,mongoose.connect()决定了前端页面要连接的数据库,这段代码说明我连接的是本地的library数据库,挂载在模型上并且要暴露出去的就是mongoose.model中叫Book的这个表,这个表在MongoDB中也被称作集合。

 

mongodb 查询返回json数据 mongodb查询json里面的值_mongodb 查询返回json数据_03

mongodb 查询返回json数据 mongodb查询json里面的值_数据_04

 

    接下来阐述问题的关键:在Book这个位置,我们容易理解为这是library库中一个叫Book的表,所以就去这个Book表中获取数据,这就产生了“错位”。因为在js文件中写的Book表名对应的数据库中的表名是books而不是Book,发现这个问题之后,我重新将Json文件导入到library库中的books表(集合)中,并且在代码中手动写入了一条数据,发现这条手动添加的数据与导入的Json文件的数据都存在与books这个表中了,

    啊,终于!还没有结束……

 

(三) Json文件中数据的格式

    即使这些数据存在于我所使用的数据表中,但我依旧获取不到Json文件中的数据,逐渐开始头秃……

    接下来就是一顿熟悉又迅猛的百度搜索操作……这时候第二天的上午已经快要没了。而当我以为一无所获的时候,打开的众多网页标签中,有这么一篇文章突然又吸引到了我的注意,我认真的留意了其中的一些细节,意识到了可能存在的问题。

    仔细观察下面两份Json文件的数据格式:

mongodb 查询返回json数据 mongodb查询json里面的值_数据库_05

mongodb 查询返回json数据 mongodb查询json里面的值_mongodb 查询返回json数据_06

 

 

相信都看出来区别了,果然错误就出在了这个地方。

    第一个数据格式通常是在我们不使用数据库,但是又需要模拟一些数据操作时会使用到而当需要引入数据库时,则需要换成第二种格式这样引入的Json文件才能被数据库读取到其中的一条条数据,而在数据库引入第一种数据格式的时候,数据库会把这一整个Json文件当做一条数据,即第一种格式中最外层的黄色大括号中的内容被视为了一条数据。


 啊……心真累……


 修改好Json文件的格式后,再使用mongoimport将文件引入本地数据库,完成后再读取数据,数据完美呈现!