数据库系统之MongoDB查询语言


简单的find语句已经在我的上篇文章介绍过了:
https://blog.csdn.net/Jifu_M/article/details/112543664
这篇文章介绍相对复杂一些的find语句。

对嵌套文档的查询

db.department.find({"courses":[{"code":"001","title":"ABC", "credits":3},
							   {"code":"002", "title":"DEF", "credits":6},
							   {"code":"003", "title":"GHT", "credits":12}]})

找到所有的department同时提供001,002,003并且题目分别是ABC,DEF,GHT学分分别为3,6和12。

db.department.find({"courses.1":{"code":"001","title":"ABC", "credits":3}})

找到所有department,这个department提供的第二个课程的代码是001,标题ABC,价值3学分.
courses.1代表第二个,courses.0代表第一个。

数组的查询操作符

查询的数组等于[1,2,3,4,5]:

{"array":{"$all":[1,2,3,4,5]}}

查找满足包含两个元素的数组:

{"array":{"$elemMatch":{$eq:2}}}

查找大小为5个的数组:

```javascript
{"array":{"$size":5}}

Projections

查找每个部门的名称和代码,不显示文件id:

db.department.find({ },{"name":1,"code":1, "_id":0})

其中1代表显示,0代表不显示,其他非id的属性不设置默认为0.

查询空值和丢失的键

找到所有没有预算的部门:

db.department.find({"budget":null})

找到所有描述中没有键name的部门:

db.department.find({"name":{"$exists":false}})

使用 cursor进行迭代

创建一个cursor并在cursor中显示所有文档:

/*case 1*/
var cursor = db.department.find({})
cursor
/*case 2*/
var cursor = db.department.find({})
while(cursor.hasNext()) { print(tojson(cursor.next())); }
/*case 3*/
var cursor = db.department.find({})
cursor.forEach(printjson)

使用cursor列出所有预算大于1000的部门名称和预算

var cdept=db.department.find()
cdept.forEach(function(x)
{ if (x.budget > 1000 ) {print(x.name, x.budget)}});

将结果保存在数组中

var cursor = db.department.find({})
var CursorArray = cursor.toArray();
var document = CursorArray[2];
printjson(document)

关于MongoDB查询语言项目练习可以看我的这篇文章:
https://blog.csdn.net/Jifu_M/article/details/112549430
可以帮助你更好的理解掌握查询语言。

References

  1. Chodorow K. MongoDB The Definitive Guide, O’Reilly, 2013, chapter 2.
  2. Banker K., Bakkum P., Verch S., Garret D., Hawkins T., MongoDB in Action, 2nd ed., Manning Publishers, 2016.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值