头歌解答 3-3 MongoDB 文档的高级查询操作

第1关:数据的导入导出

编程要求

在右侧命令行进行操作:

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

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

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

解答

mongoimport -d mydb1 -c test --type csv --headerline --ignoreBlanks --file /home/example/student.csv
mongoexport -d mydb1 -c test -o /home/test1.json --type json
mongoexport -d mydb1 -c test -o /home/test1.csv  --type csv -f "_id,name,age,sex,major"

第2关:高级查询(一)

编程要求

现有 person.json 文件内容如下:

_id name age sex hobbies
1 杨璐 19 女 唱歌,跳舞
2 李建学 20 男 唱歌,篮球
…… …… …… …… ……
在命令行进行操作:

将 /home/example/person.json 文件导入到数据库 mydb2 中的 test 集合中。
在右侧代码行 Begin-End 中编辑:

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

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

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

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

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

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

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

注意:上述操作共有七条命令,每条命令以;号隔开(由于测试需要,请在$前加\(转义符),即使用$,平时在命令窗口练习不需要加\;不要使用双引号改用 单引号)。

解答

## 命令行部分
mongoimport -d mydb2 -c test --type json --file /home/example/person.json
## 代码行部分
#********* Begin *********#
echo "
db.test.find({hobbies:{\$all:['唱歌', '跳舞']}}).sort({_id:1});
db.test.find({hobbies:{\$all:['羽毛球', '跳舞']}}).sort({_id:1});
db.test.find({hobbies:{\$size:3}}).sort({_id:1});
db.test.find({hobbies:{\$exists:true}}).sort({_id:1});
db.test.find({age:{\$in:[19,23]}}).sort({_id:1});
db.test.find({age:{\$nin:[20]}}).sort({_id:1});
db.test.find({age:{\$mod:[9,2]}}).sort({_id:1});
"
#********* End *********#

第3关:高级查询(二)

编程要求

现有 person.json 文件内容如下:

_id name age sex hobbies
1 杨璐 19 女 唱歌,跳舞
2 李建学 20 男 唱歌,篮球
…… …… …… …… ……
在右侧命令行进行操作:

将 /home/example/person.json 文件导入到数据库 mydb3 中的 test 集合中。
在右侧代码行 Begin-End 中编辑,如下:

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

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

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

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

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

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

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

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

注意:上述操作共有八条命令,每条命令以;号隔开(由于测试需要,请在$前加\(转义符),即使用$,平时在命令窗口练习不需要加\;不要使用双引号改用 单引号)。

解答

## 命令行部分
mongoimport -d mydb3 -c test --type json --file /home/example/person.json
## 代码行部分
#********* Begin *********#
echo "
db.test.find({\$and:[{age:20}, {sex:'男'}]}).sort({_id:1});
db.test.find({\$or:[{age:20}, {sex:'男'}]}).sort({_id:1});
db.test.find({name:/^韩.*/}).sort({_id:1});
db.test.find({\$and:[{age:{\$gte:19}}, {age:{\$lt:22}}]}).sort({_id:1});
db.test.find({\$or:[{age:{\$lt:19}}, {age:{\$gt:21}}]}).sort({_id:1});
db.test.find({name:{\$not:/^韩.*/}}).sort({_id:1});
db.test.find({name:{\$not:/^韩.*/}}).count();
db.test.find({\$and:[{age:{\$gte:19}}, {age:{\$lt:22}}]}).count();
"
#********* End *********#

第4关:游标

编程要求

在命令行进行以下操作:

在数据库 mydb4 中,向集合 test 循环插入 10000 条数据,格式如下:
_id title content
1 MongoDB1 hello1
2 MongoDB2 hello2
3 MongoDB3 hello3
…… …… ……
将集合 test 以 csv 格式导出到 /home/test/test4.csv 文件中。
打印游标中的数据信息请自行练习尝试,测评不做要求。

解答

mongo
use mydb4
for(var i = 0; i<10000; i++)db.test.insert({_id:i, title:"MongoDB"+i, content:"hello"+i})
exit
mongoexport -d mydb4 -c test -o /home/test/test4.csv  --type csv -f "_id, title, content"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值