Loading... # 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" ```  最后修改:2021 年 10 月 11 日 10 : 55 AM © 允许规范转载