【有书共读】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#