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

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})
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuYunTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值