【有书共读】MongoDB实第二版第五章

格式优化了文字同等的内容部分可以查看博文https://blog.csdn.net/YuYunTan/article/details/85317055
第24期牛客有书共读栏目《MongoDB实战(第二版)》


MongoDB实战第二版笔记(6)第五章笔记

1、find方法返回一个光标(对象),而findOne方法返回一个文件。

2、通过find返回结果集上调用skip和limit实现分页。它们在查询被调用后出现,而排序和限制参数发送至查询兵由MongoDB服务器处理,这种语法模式被称为方法链接,旨在更容易生成查询语句。

db.products.find({..}).sort({..}).skip(...).limit(..)

3、skip、limit和sort顺序在JavaScript shell中不重要。这些查找可以使用索引,标签拥有唯一索引,因为它们提供备用主键,而所有_id字段自动获取标准合集的唯一索引。

4、当访问根级目录时不会显示任何商品。针对查询的类别集合的父ID为nulll查询,搜索结果是根级别类别。

5、用投影返回限制字段。需要额外的参数:想得到的一个值为1的哈希字段。示例限制返回字段是_id的。

db.users.findOne({...},{'_id':1})

<6、MongoDB允许正则表达式查询,例如'/^Ba/'即以Ba为前缀的字符串,然后作为搜索条件。

7、MongoDB所有文本字符串匹配是区分大小写,不区分则使用正则表达式。

8、范围查询运算符

运算符 描述
$lt 小于
$gt 大于
$lte 小于等于
$gte 大于等于

9、一般不存储多种类型为同一集合的密钥

10、集合查询运算符

操作符 描述
$in 如果任意参数在引用集合里,则匹配
$all 如果所有参数在引用集合里且被使用在包含数组的文档中,则匹配
$nin 如果没有参数在引用集合里,则匹配

11、使用$in 运算符的另一种方法是作为布尔的包容性或者对单一属性。选择性是一种使用索引缩小查询结果的能力。$ne$nin运算符不是选择的,因此当使用集合运算符,$in$all可以利用索引,但$nin不能因此而要集合浏览,若要使用则试图结合另一个使用索引的查询项。

12、布尔运算符

操作符 描述
$ne 不匹配参数条件
$not 不匹配结果
$or 有一个条件匹配就成立
$nor 不匹配参数条件
$and 不匹配参数条件
$exists 不匹配参数条件

查找Acme制造的所有没有gardening标签的商品:

db.products.find({'detail.manufacturer':'Acme',tags:{$ne:"gardening"}})

13、查询匹配一个实体对象时,关键字顺序很重要。哈希在ruby1.8中不会保留顺序,要保留则需要使用类的对象BSON::OrderedHash代替。

14、数组用于存储字符串列表、对象IDs,甚至其他的文档。数组提供丰富又易于理解的文档。最简单的数组查询看起来就像查询任何其他文档类型

15、数组操作符

操作符 描述
$elemMatch 如果提供的所有词语在相同的子文档中,则匹配。匹配多个或更多属性的子文档使用
$size 如果子文档数组大小与提供的文本值相同,则匹配。

16、可以对特定位置的数组使用点符号查询值。

db.users.find({'addresses.0.state':"NY"})

示例中addresses是数组,数组的第0个元素是用户的配送地址。
17、$where执行任意JavaScript来选择文档,JavaScript中this指向当前文档。
18、$regex匹配元素对应提供给regex(正则表达式)项。

20、正则表达式查询不能使用索引并且执行的世界比大多数选择器更长,建议节制性地使用。

21、如果本地不支持正则表达式类型环境,则需要$regex$options运算符

db.reviews.find({
    'user_id':...,
    'text':{
        '$regex':"best|worst",
        '$options':"i"
    }
})

22、其他查询运算符

运算符 描述
$mod[(quotient),(result)] 如果元素除以除数符合结果则匹配
$type 如果元素的类型符合指定的BSON类型则匹配
$text 允许在建立文本索引的字段上进行文笔搜索。

$mod有两个值,第一个是除数,第二个是预期的余数。

23、BSON类型
图片说明

24、BSON类型中,maxkey和minkey用于在索引中插入相同的最大或最小的虚拟值。这意味着可以强制文档排序为索引的第一个或最后一个项目。

25、可以映射来选择子集的字段用来返回每个文档的查询结果合集。

  • $slice 选择返回文档的子集

映射被定义为返回字段合集。

db.users.find({},{'username':1})

只返回包含username和_id的用户文档。

排除相反字段,则映射为0。

db.users.find({},{'addresses':0,'payment_methods':0})

将返回值范围存储到一个数组。返回前12条评论或后5条。

db.users.find({},{'reviews':{$slice:12}})
db.users.find({},{'reviews':{$slice:-5}})

可取两个元素的数组,分别表示返回跳过和限制页数。

跳过前24条评论且限制评论为12条

db.users.find({},{'reviews':{$slice:[24,12]})

26、一个或多个字段升序或降序排序。下面是降序例子

db.reviews.find({}).sort({'rating':-1})
db.reviews.find({}).sort({'helpful_votes':-1,rating':-1})
#MongoDB#
全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务