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

排序

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 ] } } )
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容