from : http://blog.csdn.net/qq_16313365/article/details/58599253

1.查询和投影

 

1.1 比较操作符

$eq

语法:{ <field>: { $eq: <value> } }
释义:匹配等于(=)指定值的文档
举例:
  1. 查询age=20的文档:
  2. db.person.find( { age: { $eq: 20 } } )
  3. 相当于:
  4. db.person.find( { age: 20 } )

$gt

语法:{<field>: {$gt: <value>} }
释义:匹配大于(>)指定值的文档

$gte

语法:{field: {$gte: value} }
释义:匹配大于等于(>=)指定值的文档

$lt

语法:{field: {$lt: value} }
释义:匹配小于(<)指定值的文档

$lte

语法:{ field: { $lte: value} }
释义:匹配小于等于(<=)指定值的文档

$ne

语法:{field: {$ne: value} }
释义:匹配不等于(≠)指定值的文档

$in

语法:{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
释义:匹配数组中的任一值
举例:
  1. 查询该集合中字段qty的值与数组中的任意值相等的文档:
  2. db.inventory.find( { qty: { $in: [ 5, 15 ] } } )

$nin

语法:{ field: { $nin: [ <value1>, <value2> ... <valueN> ]} }
释义:不匹配数组中的值

1.2 逻辑操作符

$or

语法:{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
释义:或 条件查询
举例:
  1. 查询age<20或者address是beijing的文档:
  2. db.person.find( { $or: [ { age: { $lt: 20 } }, { address: "beijing" } ] } )

$and

语法:{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
释义:与 条件查询

$not

语法:{ field: { $not: { <operator-expression> } } }
释义:查询与表达式不匹配的文档
举例:
  1. 查询age不大于20的文档:
  2. db.person.find( { age: { $not: { $gt: 20 } } } )

$nor

语法:{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
释义:查询与任一表达式都不匹配的文档
举例:
  1. 查询age既不等于20,sex也不是男的文档:
  2. db.person.find( { $nor: [ { age: 20 },{ sex: "男"} ] } )

1.3 元素操作符

$exists

语法:{ field: { $exists: <boolean> } }
释义:查询存在指定字段的文档
举例:
  1. 查询存在phone字段的文档:
  2. db.person.find( { phone: { $exists: true } } )

$type

语法:{ field: { $type: <BSON type number> | <String alias> } }
释义:查询类型为指定类型的文档,3.2版本添加alias别名,各种类型的Number及Alias如下
举例:
假设存在这样一个集合:
  1. { "_id": 1, address: "2030 Martian Way",zipCode: "90698345"},
  2. { "_id": 2, address: "156 Lunar Place",zipCode: 43339374},
  3. { "_id": 3, address: "2324 Pluto Place",zipCode: NumberLong(3921412)},
  4. { "_id": 4, address: "55 Saturn Ring", zipCode: NumberInt(88602117)}
查询该集合中zipCode字段的数据类型为String类型的文档:
  1. db.addressBook.find( { "zipCode" : { $type : 2 } } );
  2. db.addressBook.find( { "zipCode" : { $type : "string" } } );

1.4 评估操作符(Evaluation,不知道翻译成什么合适,暂且翻译成这样吧)

$mod

语法:{ field: { $mod: [ 除数, 余数 ] } }
释义:取余条件查询
举例:
  1. 查询age字段的值除以2余0的文档:
  2. db.person.find( { age: { $mod: [ 2, 0 ] } } )

$regex

语法:
{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }
释义:正则表达式查询
举例:
  1. db.products.find( { sku: { $regex: /^ABC/i } } )

$text

语法:
  1. {
  2. $text: {
  3. $search: <string>,
  4. $language: <string>,
  5. $caseSensitive: <boolean>,
  6. $diacriticSensitive: <boolean>
  7. }
  8. }
    • $search ——关键词
    • $language ——语言,不支持中文!!!支持语言如下:点击
    • $caseSensitive——是否区分大小写,默认false
    • $diacriticSensitive——是否区分读音,默认false
释义:文本索引查询
举例:较为复杂,请参考官网

$where

释义:把一个含有JavaScript表达式的字符串或者是整个JavaScript函数转换到查询系统中,对内嵌文档不起作用
举例:
  1. db.myCollection.find( { $where: "this.credits == this.debits" } );
  2. db.myCollection.find( { $where: function() { return obj.credits == obj.debits; } } );

1.5 Geospatial Query Operators

请参考官网

1.6 数组操作符

$all

语法:{ < field >: { $ all : [ < value1 > , < value2 > ... ] } }
释义:匹配文档的数组字段中包含所有指定元素的文档
举例:
  1. 查询articles集合中tags字段(是个数组)包含“ssl”和“security”的文档(包含,但并不是全部等于)
  2. db.articles.find( { tags: { $all: [ [ "ssl", "security" ] ] } } )

$elemMatch(query)

语法:{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
释义:匹配内嵌文档或数组中的部分field
举例:
假设现有集合:
  1. { _id: 1, results: [ 82, 85, 88 ] }
  2. { _id: 2, results: [ 75, 88, 89 ] }
查询results数组中含有区间[80,85)元素的文档(结果为第一条):
  1. db.scores.find( { results: { $elemMatch: { $gte: 80, $lt: 85 } } })

$size

语法:{ field: { $size: <number> }
释义:匹配数组长度为指定大小的文档
举例:
  1. 查询已经集齐了5张福卡的文档:
  2. db.person.find({card:{$size:5}})

1.7 Bitwise Query Operators

请参考官网

1.8投影操作符

$(projection)

释义:查询数组中首个匹配条件的元素,相当于findOne()方法
举例:
假设现有如下集合students:
  1. { "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
  2. { "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] }
  3. { "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }
  4. { "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] }
  5. { "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] }
  6. { "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }
查询semester=1,并且grades中符合大于等于85的元素的第一个元素:
  1. db.students.find( { semester: 1, grades: { $gte: 85 } },{ "grades.$": 1 } )
返回如下结果:
  1. { "_id" : 1, "grades" : [ 87 ] }{ "_id" : 2, "grades" : [ 90 ] }{ "_id" : 3, "grades" : [ 85 ] }

$elemMatch(projection)

释义:用于数组或内嵌文档中的元素匹配(子元素匹配),只会返回匹配的第一个元素!!!
举例:
假设现有如下集合:
  1. {
  2. _id: 1,
  3. zipcode: "63109",
  4. students: [
  5. { name: "john", school: 102, age: 10 },
  6. { name: "jess", school: 102, age: 11 },
  7. { name: "jeff", school: 108, age: 15 }
  8. ]
  9. }
  10. {
  11. _id: 2,
  12. zipcode: "63110",
  13. students: [
  14. { name: "ajax", school: 100, age: 7 },
  15. { name: "achilles", school: 100, age: 8 },
  16. ]
  17. }
  18. {
  19. _id: 3,
  20. zipcode: "63109",
  21. students: [
  22. { name: "ajax", school: 100, age: 7 },
  23. { name: "achilles", school: 100, age: 8 },
  24. ]
  25. }
查询zipcode为63109并且students数组中school=102的文档:
  1. db.schools.find( { zipcode: "63109" },{ students: { $elemMatch: { school: 102 } } } )
返回如下结果:
  1. { "_id" : 1, "students" : [ { "name" : "john", "school" : 102, "age" : 10 } ] }{ "_id" : 3 }

$meta

语法:{ $meta: <metaDataKeyword> }
释义:请参考官网

$slice(projection)

释义:在查询中将数组进行切片(类似于分页)
举例:
  1. (1)查询结果中,对于comments数组的元素只显示前5个:
  2. db.posts.find( {}, { comments: { $slice: 5 } } )
  3. (2)查询结果中,对于comments数组的元素只显示后5个:
  4. db.posts.find( {}, { comments: { $slice: -5 } } )
  5. (3)查询结果中,对于comments数组的元素跳过(skip)前20个,并只显示(limit)10个元素(即21-30):
  6. db.posts.find( {}, { comments: { $slice: [ 20, 10 ] } } )
  7. (4)同理,跳过后20个,并显示10个:
  8. db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } )

2.更新操作符

 

2.1 字段更新

$inc

语法:{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }
释义:将文档中的某个field对应的value自增/减某个数字amount
举例:
  1. 将_id为1的文档的age字段在原来的基础上+1:
  2. db.person.update( { _id: 1 }, { $inc: { age: 1} })

$mul

语法:{ $mul: { field: <number> } }
释义:将文档中的某个field对于的value做乘法操作
举例:
  1. 将_id为1的文档的price值乘以1.25并更新:
  2. db.products.update( { _id: 1 }, { $mul: { price: 1.25 } })

$rename

语法:{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
释义:重命名文档中的指定字段的名
举例:
  1. 将_id为1的文档的nickname字段重命名为alias,cell字段重命名为mobile
  2. db.person.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )

$setOnInsert

语法:
db.collection.update( <query>, { $setOnInsert: { <field1>: <value1>, ... } }, { upsert: true })
释义:配合upsert操作,在作为insert时可以为新文档扩展更多的field
举例:
  1. 将_id为1的文档的item字段更改为apple,并插入新字段defaultQty,值为100
  2. db.products.update( { _id: 1 }, { $set: { item: "apple" }, $setOnInsert: { defaultQty: 100 } }, { upsert: true })

$set

语法:{ $set: { <field1>: <value1>, ... } }
释义:更新文档中的某一个字段,而不是全部替换
举例:
假设现有文档:
  1. {_id:1,name:"zhangsan",sex:"男"}
 
  1. 如果这样写:
  2. db.person.update({_id:1},{sex:"女"});
  3. 则更改之后的结果是酱的:
  4. {_id:1,sex:"女"}
  5. 若只想更改sex字段,可以这样写:
  6. db.person.update({_id:1},{$set:{sex:"女"}});
 

$unset

语法:{ $unset: { <field1>: "", ... } }
释义:删除文档中的指定字段,若字段不存在则不操作
举例:
  1. 删除_id为1的文档的name字段
  2. db.person.update( { _id: 1}, { $unset: { name:"" } })

$min

语法:{ $min: { <field1>: <value1>, ... } }
释义:将文档中的某字段与指定值作比较,如果原值小于指定值,则不更新;若大于指定值,则更新
举例:
  1. 假设现有文档:
  2. { _id: 1, highScore: 800, lowScore: 200 }
  3. 执行:db.scores.update( { _id: 1 }, { $min: { lowScore: 150 } } )
  4. 执行结果:{ _id: 1, highScore: 800, lowScore: 150 }

$max

语法:{ $max: { <field1>: <value1>, ... } }
释义:与$min功能相反

$currentDate

语法:{ $currentDate: { <field1>: <typeSpecification1>, ... } }
释义:设置指定字段为当前时间
举例:
  1. db.person.update( { _id: 1 }, { $currentDate: { "lastLogin": { $type: "timestamp" } } })

2.2 数组更新

$(update)

语法:{ "<array>.$" : value }
释义:请参考官网

$addToSet

语法:{ $ addToSet : { < field1 >: < value1 > , ... } }
释义:用于添加一个元素到array中,一般用于update
举例:
  1. 假设现有文档:
  2. { _id: 1, letters: ["a", "b"] }
  3. 执行:db.test.update({_id:1},{$addToSet:{letters:"c"}})
  4. 结果:{ "_id" : 1, "letters" : [ "a", "b", "c" ] }
  5. 执行:db.test.update({_id:1},{$addToSet:{letters:["d","e"]}})
  6. 结果:{ "_id" : 1, "letters" : [ "a", "b", "c", [ "d", "e" ] ] }
  7. 注意,若想让添加的多个元素分开成单个元素的效果,请参考$each的使用方法

$pop

语法:{ $pop: { <field>: <-1 | 1>, ... } }
释义:删除数组中的第一个或最后一个元素,-1表示第一个,没错,第一个;1表示最后一个!
举例:
  1. db.test.update({_id:1},{$pop:{letters:-1}});

$pullAll

语法:{ $pullAll: { <field1>: [ <value1>, <value2> ... ], ... } }
释义:删除数组或内嵌文档字段中所有指定的元素
举例:
  1. 假设现有文档:{ _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] }
  2. 执行:db.test.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )
  3. 结果:{ "_id" : 1, "scores" : [ 2, 1 ] }

$pull

语法:{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
释义:删除满足条件的元素
举例:
  1. 假设现有文档:{ _id: 1, votes: [ 3, 5, 6, 7, 7, 8 ] }
  2. 执行:db.test.update( { _id: 1 }, { $pull: { votes: { $gte: 6 } } } )
  3. 结果:{ _id: 1, votes: [ 3, 5 ] }
更多用法及实例,请参考官网

$pushAll

释义:自v2.4开始,方法弃用,请使用$push和$each来配合实现

$push

语法:{ $push: { <field1>: <value1>, ... } }
释义:往数组中追加指定的元素,若文档中数组不存在,则创建并添加指定元素,自v2.4起,添加了对$.each的支持
举例:
  1. db.students.update( { _id: 1 }, { $push: { scores: 89 } })

$each

语法:
  1. { $addToSet: { <field>: { $each: [ <value1>, <value2> ... ] } } }
  2. { $push: { <field>: { $each: [ <value1>, <value2> ... ] } } }
释义:需要搭配$addToSet或$push方可使用

$sort

语法:
  1. {
  2. $push: {
  3. <field>: {
  4. $each: [ <value1>, <value2>, ... ],
  5. $sort: <sort specification>
  6. }
  7. }
  8. }
释义:自v2.4加,配合$push使用,表示给文档中的指定数组元素排序,1是升序,-1是降序
举例:
  1. db.students.update(
  2. { _id: 1 },
  3. {
  4. $push: {
  5. quizzes: {
  6. $each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ],
  7. $sort: { score: 1 }
  8. }
  9. }
  10. }
  11. )

$position

语法:
  1. {
  2. $push: {
  3. <field>: {
  4. $each: [ <value1>, <value2>, ... ],
  5. $position: <num>
  6. }
  7. }
  8. }
释义:自v2.6加,配合$push使用表示往数组元素中的指定位置插入元素

最新文章

  1. Git 的详细使用
  2. javaweb 解决将ajax返回的内容用document.write写入,FireFox一直加载的问题
  3. js string to int
  4. Android studio 程序升级和sdk manager 升级方法
  5. 低功耗蓝牙4.0BLE编程-nrf51822开发(9)
  6. 解决magento添加产品在前台不显示问题
  7. 如何快速delete数据
  8. 给Asp.net MVC Forms 验证设置角色访问控制
  9. 英语app分析
  10. weblogic的使用
  11. JavaScript AJAX实例
  12. Android群英传帝落篇——程序人生,路漫漫其修远兮,吾将上下而求索!
  13. cadence布线约束规则设置
  14. python的内置模块xml模块方法 xml解析 详解以及使用
  15. LLDB 中从地址设置为变量
  16. Saiku根据入参日期查询出对应的数据(二十)
  17. JQuery1.72中二个Bug,formhtml()方法与clone()方法的二个Bug进行重写
  18. MySQL 之迁移用户及权限
  19. PowerBI开发 第八篇:查询参数
  20. js中sort()方法冒泡排序模拟

热门文章

  1. 阿里云服务器 OSS的使用限制
  2. java基础-day8
  3. ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
  4. Opencv打开摄像头,读不到图像,一般来说先读取第一帧,舍弃,然后就正常了
  5. EBS环境提交新请求默认是&quot;单一请求&quot;
  6. Android-WebView与本地HTML(播放视频)
  7. C# 用户选择单个压缩-系统自带压缩
  8. C# Argument &#39;picture&#39; must be a picture that can be used as an Icon
  9. 浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
  10. 前端基础-html 字体标签,排版标签,超链接,图片标签