2-1 MongoDB 文档的高级查询操作

第1关:数据的导入导出

將 /home/example 路径下的文件 student.csv 导入到数据库 mydb1 的 test 集合中

mongoimport -d mydb1 -c test --type csv --headerline  --file /home/example/student.csv
  • -d Testdb1 :指定将数据导入到 Testdb1 数据库;
  • -c score :将数据导入到集合 score ,如果这个集合之前不存在,会自动创建一个(如果省略 –collection 这个参数,那么会自动新建一个以 CSV 文件名为名的集合);
  • –type csv :文件类型,这里是 CSV;
  • –headerline :这个参数很重要,加上这个参数后创建完成后的内容会以 CSV 文件第一行的内容为字段名(导入json文件不需要这个参数);
  • –ignoreBlanks :这个参数可以忽略掉 CSV 文件中的空缺值(导入json文件不需要这个参数);
  • –file 1.csv :这里就是 CSV 文件的路径了,需要使用绝对路径。

image-20210922110849663

将数据库 mydb1 的 test 集合以 json 格式导出到 /home/test1.json 的 json 文件中

mongoexport -d mydb1 -c test -o /home/test1.json --type json
  • -o /file.json :输出的文件路径/(根目录下)和文件名;
  • –type json :输出的格式,默认为 json。

image-20210922110827576

将数据库 mydb1 的 test 集合以 csv 格式导出到 /home/test1.csv 的 CSV 文件中

mongoexport -d mydb1 -c test -o /home/test1.csv --type csv -f "_id,name,age,sex,major"
  • -f :当输出格式为 csv 时,需要指定输出的字段名。

image-20210922110900886

第2关:高级查询(一)

将 /home/example/person.json 文件导入到数据库 mydb2 中的 test 集合中

_idnameagesexhobbies
1杨璐19唱歌,跳舞
2李建学20唱歌,篮球
…………………………
mongoimport -d mydb2 -c test --type json  --file /home/example/person.json

image-20210922113719468

执行查询命令,查找所有喜欢唱歌和跳舞的人的信息,并按照_id升序排序

db.test.find({hobbies:{\$all:['唱歌','跳舞']}}).sort({_id:1});

执行查询命令,查找所有喜欢羽毛球和跳舞的人的信息,并按照_id升序排序

db.test.find({hobbies:{\$all:['羽毛球','跳舞']}}).sort({_id:1});

执行查询命令,查找有3个爱好的人的信息,并按照_id升序排序

db.test.find({hobbies:{\$size:3}}).sort({_id:1});

执行查询命令,查找文档中存在 hobbies 字段的人的信息,并按照_id升序排序

db.test.find({hobbies:{\$exists:true}}).sort({_id:1});

执行查询命令,查找19岁和23岁的人的信息,并按照_id升序排序

db.test.find({age:{\$in:[19,23]}}).sort({_id:1});

执行查询命令,查找不是20岁的人的信息,并按照_id升序排序

db.test.find({age:{\$nin:[20]}}).sort({_id:1});

执行查询命令,查找 age 取模9等于2的人的信息,并按照_id升序排序。

db.test.find({age:{\$mod:[9,2]}}).sort({_id:1});

注意:上述操作共有七条命令,每条命令以;号隔开(由于测试需要,请在$前加\(转义符),即使用\$ ;

平时在命令窗口练习不需要加\

不要使用双引号改用 单引号)。

第3关:高级查询(二)

将 /home/example/person.json 文件导入到数据库 mydb3 中的 test 集合中。

_idnameagesexhobbies
1杨璐19唱歌,跳舞
2李建学20唱歌,篮球
…………………………
mongoimport -d mydb3 -c test --type json  --file /home/example/person.json

image-20210922172131550

执行查询命令,查找年龄为20岁男生的信息,并按照_id升序排序;

db.test.find({\$and:[{age:20},{sex:'男'}]}).sort({_id:1});

执行查询命令,查找年龄为20岁或者性别为男生的信息,并按照_id升序排序

db.test.find({\$or:[{age:20},{sex:'男'}]}).sort({_id:1});

执行查询命令,查找name = 韩*开头的人的信息,并按照_id升序排序

db.test.find({name:/^韩.*/}).sort({_id:1});

执行查询命令,查找年龄19 =< age < 22的人的信息,并按照_id升序排序

db.test.find({\$and:[{age:{\$gte:19}},{age:{\$lt:22}}]}).sort({_id:1});

执行查询命令,查找年龄age < 19age >21的信息,并按照_id升序排序

db.test.find({\$or:[{age:{\$not:{\$gte:19}}},{age:{\$not:{\$lte:21}}}]}).sort({_id:1});

执行查询命令,查找name != 韩*开头的人的信息,并按照_id升序排序

db.test.find({name:{\$not:/^韩.*/}}).sort({_id:1});

执行查询命令,查找查找name != 韩*开头的人的个数

db.test.find({name:{\$not:/^韩.*/}}).count();

执行查询命令,查找年龄19 =< age < 22的人的个数

db.test.find({\$and:[{age:{\$gte:19}},{age:{\$lt:22}}]}).count();

注意:上述操作共有八条命令,每条命令以;号隔开(由于测试需要,请在$前加\(转义符),即使用\$ ;

平时在命令窗口练习不需要加\

不要使用双引号改用 单引号)。

第4关:游标

使用mydb4数据库

use mydb4;

image-20210922202156557

在数据库 mydb4 中,向集合 test 循环插入 10000 条数据,格式如下:

_idtitlecontent
1MongoDB1hello1
2MongoDB2hello2
3MongoDB3hello3
………………
for(var i=0;i<10000;i++) {db.test.insert({_id:i,title:'MongoDB'+i,content:'hello'+i})};

image-20210922202937328

注:题目给出的_id从1开始,实际应该从0开始

将集合 test 以 csv 格式导出到 /home/test/test4.csv 文件中

mongoexport -d mydb4 -c test -o /home/test/test4.csv --type csv -f "_id,title,content"

image-20210922202428311

最后修改:2021 年 10 月 11 日 10 : 55 AM