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 文件的路径了,需要使用绝对路径。
将数据库 mydb1 的 test 集合以 json 格式导出到 /home/test1.json 的 json 文件中
mongoexport -d mydb1 -c test -o /home/test1.json --type json
- -o /file.json :输出的文件路径
/
(根目录下)和文件名;- –type json :输出的格式,默认为 json。
将数据库 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 时,需要指定输出的字段名。
第2关:高级查询(一)
将 /home/example/person.json 文件导入到数据库 mydb2 中的 test 集合中
_id | name | age | sex | hobbies |
---|---|---|---|---|
1 | 杨璐 | 19 | 女 | 唱歌,跳舞 |
2 | 李建学 | 20 | 男 | 唱歌,篮球 |
…… | …… | …… | …… | …… |
mongoimport -d mydb2 -c test --type json --file /home/example/person.json
执行查询命令,查找所有喜欢唱歌和跳舞的人的信息,并按照_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 集合中。
_id | name | age | sex | hobbies |
---|---|---|---|---|
1 | 杨璐 | 19 | 女 | 唱歌,跳舞 |
2 | 李建学 | 20 | 男 | 唱歌,篮球 |
…… | …… | …… | …… | …… |
mongoimport -d mydb3 -c test --type json --file /home/example/person.json
执行查询命令,查找年龄为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 < 19
或age >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;
在数据库 mydb4 中,向集合 test 循环插入 10000 条数据,格式如下:
_id | title | content |
---|---|---|
1 | MongoDB1 | hello1 |
2 | MongoDB2 | hello2 |
3 | MongoDB3 | hello3 |
…… | …… | …… |
for(var i=0;i<10000;i++) {db.test.insert({_id:i,title:'MongoDB'+i,content:'hello'+i})};
注:题目给出的_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"