美文网首页
其它语法补充(排序、投影等)

其它语法补充(排序、投影等)

作者: 灯不梨喵 | 来源:发表于2017-12-24 00:47 被阅读0次

排序

sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
>db.COLLECTION_NAME.find().sort({KEY:1})

索引

>db.COLLECTION_NAME.ensureIndex({KEY:1})
1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
>db.col.ensureIndex({"title":1})

聚合

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
aggregate()
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

projection operators投影算符

$

Projects the first element in an array that matches the query condition.
投影到符合查询结果的数组中的第一个元素
实例
数据:
{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] }
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }
{ "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] }
{ "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] }
{ "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }
查询:

db.students.find( { semester: 1, grades: { $gte: 85 } },
                  { "grades.$": 1 }

这段查询的第二个参数,"grades.$": 1意味着grades数组的查询结果仅返回第一个,而1代表查询结果显示grades,并不是“第一个”的意思。而_id属性是默认显示的,如果不需要显示,则置0,如图:

我们还可以应用到更新上:

不过update操作似乎只能更新一个?
$elemMatch

Projects the first element in an array that matches the specified $elemMatch condition.
投影到符合一个特定$elemMatch条件的数组的第一个结果
和前一个操作的区别是,$elemMatch应用于嵌套
示例:

{
 _id: 1,
 zipcode: "63109",
 students: [
              { name: "john", school: 102, age: 10 },
              { name: "jess", school: 102, age: 11 },
              { name: "jeff", school: 108, age: 15 }
           ]
}
{
 _id: 2,
 zipcode: "63110",
 students: [
              { name: "ajax", school: 100, age: 7 },
              { name: "achilles", school: 100, age: 8 },
           ]
}
{
 _id: 3,
 zipcode: "63109",
 students: [
              { name: "ajax", school: 100, age: 7 },
              { name: "achilles", school: 100, age: 8 },
           ]
}
{
 _id: 4,
 zipcode: "63109",
 students: [
              { name: "barney", school: 102, age: 7 },
              { name: "ruth", school: 102, age: 16 },
           ]
}

在这段数据里面,students是一个对象数组,name\school\age等都是内嵌的,如果我们需要由这些属性作为查询条件的话,查询语句的格式是非常严格的。它必须包含这个对象的所有键值,且顺序必须与数据一致,否则查询结果为空。当然还有另外一种方式,譬如students.name:"ruth"这样的查询条件可不可以呢?试验过后的确会有查询结果,然而我却发现查询的结果是无效的,系统将全部数据都呈现出来了。所以我们在此采用投影的方法。
查询:

db.schools.find( { zipcode: "63109" },
                 { students: { $elemMatch: { school: 102 } } } )

结果:

{ "_id" : 1, "students" : [ { "name" : "john", "school" : 102, "age" : 10 } ] }
{ "_id" : 3 }
{ "_id" : 4, "students" : [ { "name" : "barney", "school" : 102, "age" : 7 } ] }
$meta

Projects the document’s score assigned during $text operation.
配合$text操作,$text是查找文本,假设查找'abc'那么结果会包含'aaabc' 'abccd'等
而$meta则是帮助获得更优的搜索信息
MongoDB具备一个$meta textScore来支持评判全文检索的匹配度,越贴合搜索条件的结果,它的textScore越高。例子

$slice

Limits the number of elements projected from an array. Supports skip and limit slices.
对查询结果数组进行数量上的限制和筛选。支持跳跃分割和限定分割。

用法示例: 返回博客的前10条评论
db.blog.find({"comments":{"$slice":10}}) 
 
用法示例: 返回博客的后10条评论
db.blog.find({"comments":{"$slice":10}}) 
 
用法示例: 返回博客跳过前10条,然后返回第11 ~ 15条
db.blog.find({"comments":{"$slice":[10,5]}})
返回10条结果,从数组的倒数20个开始
db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } )

相关文章

  • 其它语法补充(排序、投影等)

    排序 sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而...

  • Java mac idea hibernate的使用04

    1. HQL语法 1.1 基本语法 查全部 排序 条件查询 分页查询 聚合查询 投影查询 1.2 HQL多表查询 ...

  • Markdown 基础语法

    文章链接摘自:爱祺科技CEOhq CSDN博客地址 为保证语法兼容性,本文只介绍基础语法,扩展语法等其它内容,会...

  • 语法补充

    0x00 特殊符号 Markdown中的转义字符为\,可以转义的有:1.\\ 反斜杠2.\` 反引号3.\* 星号...

  • 排序补充

    1.插入排序 2.希尔排序 3.选择排序

  • 顽固错误,不妨试试死磕

    提高口语,其实包括几个维度。 词汇、语块、句型等 语音语调 口语语法 逻辑性 其它 其它里面还包括不少东西,上面列...

  • MySQL排序查询,分组查询,分页查询,聚合函数

    DQL:查询语句 排序查询语法:order by 字句order by 排序字段1 排序方式1, 排序字段2 排序...

  • CSS3 box-shadow

    语法: 代码:没有设置投影方式,+ 右 - 左 效果图 代码:设置投影方式,+ 左 - 右 效果图

  • 排序查询_OrderBy

    1 语法:select * from table order by <排序字段1> <排序方式1>,<排序字段2>...

  • shell -- 字符处理命令

    1、sort 排序命令 语法: 选项: 2、wc 统计命令 语法: 选项

网友评论

      本文标题:其它语法补充(排序、投影等)

      本文链接:https://www.haomeiwen.com/subject/amfcgxtx.html