MongoDB query language
简单的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
- Chodorow K. MongoDB The Definitive Guide, O’Reilly, 2013, chapter 2.
- Banker K., Bakkum P., Verch S., Garret D., Hawkins T., MongoDB in Action, 2nd ed., Manning Publishers, 2016.