这里有新鲜出炉的 MongoDB 教程,程序狗速度看过来!
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 web 应用提供可扩展的高性能数据存储解决方案。
这篇文章主要介绍了 MongoDB 的查询方法, 需要的朋友可以参考下
代码:
- db.blogs.insert([
- {
- "author": "张三",
- "title": "MongoDB简介",
- "content": "它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性、可伸缩性、扩展性于一身的高性能的面向文档的通用数据库",
- "tags": [
- "MongoDB",
- "NoSQL"
- ],
- "comment": [
- {
- "name": "Jack",
- "detail": "Good!",
- "date": ISODate("2015-07-09 09:55:49")
- },
- {
- "name": "Tom",
- "detail": "Hello World!",
- "date": ISODate("2015-07-09 18:12:35")
- },
- {
- "name": "Alice",
- "detail": "你好,Mongo!",
- "date": ISODate("2015-07-10 20:30:30")
- }
- ],
- "readCount": 154
- },
- {
- "author": "李四",
- "title": "1+1等于几",
- "content": "有的人说1+1=2,因为这是老师从小告诉我们的;而有的人说1+1=11,这是两个1的组合;但是有些人就认为1+1=1,他们觉得1个团队加上另一个团队,会组成了一个更强大的团队!",
- "tags": [
- "story",
- "rule",
- "数学"
- ],
- "comment": [
- {
- "name": "王小光",
- "detail": "每个人心里边都有自己的答案。",
- "date": ISODate("2015-07-10 11:45:57")
- }
- ],
- "readCount": 367
- },
- {
- "author": "李四",
- "title": "如何写一篇好的博客?",
- "content": "1、目标;2、坚持;3、分享;4、学习;5、提高",
- "tags": null,
- "comment": [
- {
- "name": "小明",
- "detail": "ComeOn!!!!",
- "date": ISODate("2015-07-10 14:49:06")
- },
- {
- "name": "Nike",
- "detail": "终身学习!",
- "date": ISODate("2015-07-11 10:22:36")
- },
- {
- "name": "小红",
- "detail": "贵在坚持吧、",
- "date": ISODate("2015-07-12 12:12:12")
- }
- ],
- "readCount": 1489,
- "isTop": true
- }
- ])
- Test Data
以上面的测试数据为基础,进行下面的基本查询操作:
1、查询所有博客
- db.blogs.find()
- 或
- db.blogs.find({})
- 注:查询一个文档:db.blogs.findOne()
2、查询所有博客的标题和内容(指定需要返回的键值)
- db.blogs.find({},
- {
- "title": 1,
- "content": 1,
- "_id": 0
- })
注:1 表示返回,0 表示不返回。默认情况下,"_id" 这个键总是被返回,即便是没有指定这个键
3、查询作者为 "张三" 的博客(= 操作)
- db.blogs.find({
- "author": "张三"
- })或db.blogs.find({
- "author": {
- "$eq": "张三"
- }
- })
4、查询除了作者为 "张三" 的博客(!= 操作)
- db.blogs.find({
- "author": {
- "$ne": "张三"
- }
- })
5、查询作者为 "李四" 并且博客标题为 "MongoDB 简介" 的博客(and 操作)
- db.blogs.find({
- "author": "张三",
- "title": "MongoDB简介"
- })
6、查询阅读量大于等于 200 并且小于 1000 的博客(>= 操作)
- db.blogs.find({
- "readCount": {
- "$gte": 200,
- "$lt": 1000
- }
- })
注:"$lt","$lte","$gt","$gte" 分别对应 <,<=,>,>= 操作
7、查询作者为 "张三" 或者 "李四" 的博客(or 操作)
- db.blogs.find({
- "$or": [{
- "author": "张三"
- },
- {
- "author": "李四"
- }]
- })
8、查询博客标签包含了 "NoSQL" 或者 "数学" 的博客(in 操作)
- db.blogs.find({
- "tags": {
- "$in": ["NoSQL", "数学"]
- }
- })
注:not in 操作
- db.blogs.find({
- "tags": {
- "$nin": ["NoSQL", "数学"]
- }
- }) //不包含
9、查询标签为空的博客(null 操作)
- db.blogs.find({
- "tags": null
- })
注:null 不仅会匹配到某个键为 null 的文档,也会匹配不包含这个键的文档
10、查询内容里边包含了数字 "1" 的博客
- db.blogs.find({
- "content": /1/
- })
注:只要符合常规正则表达式的,都能被 MongoDB 接受 数组操作
11、查询标签里边既包含 "story",又包含了 "rule" 的博客
- db.blogs.find({
- "tags": {
- "$all": ["story", "rule"]
- }
- })
12、查询第一个标签是 "MongoDB" 的博客
- db.blogs.find({
- "tags.0": "MongoDB"
- })
注:数组的下标是从 0 开始的
13、查询标签个数为 3 个的博客
- db.blogs.find({
- "tags": {
- "$size": 3
- }
- })
内嵌文档
14、查询 "jack" 评论过的博客
- db.blogs.find({
- "comment.name": "Jack"
- })
注:因为内嵌文档 "." 的问题,所以不能使用 URL 等
15、假设每页 2 篇博客,按阅读量倒序,取第二页的数据
- db.blogs.find({}).skip(2).limit(2).sort({
- "readCount": -1
- })
注:skip()、limit()、sort(),分别表示略过文档的数量,匹配的数量和排序(1 表示正序,-1 表示倒序)
来源: http://www.phperz.com/article/17/0518/334740.html