MongoDB中“$”操作符表达式汇总

查询

比较操作

$eq

语法:{ : { $eq: } }

释义:匹配等于(=)指定值的文档

举例:

  1. 查询age = 20的文档:
  2. db.person.find( { age: { $eq: 20 } } )
  3. 相当于:
  4. db.person.find( { age: 20 } )

$gt

语法:{: {$gt: } }

释义:匹配大于(>)指定值的文档

  1. 查询age > 20的文档
  2. db.person.find({
  3. age: {
  4. $gt: 20
  5. }
  6. })

$gte

语法:{field: {$gte: value} }

释义:匹配大于等于(>=)指定值的文档

  1. 查询age >= 20的文档
  2. db.person.find({
  3. age: {
  4. $gte: 20
  5. }
  6. })

$lt

语法:{field: {$lt: value} }

释义:匹配小于(<)指定值的文档

  1. 查询age < 20的文档
  2. db.person.find({
  3. age: {
  4. $lt: 20
  5. }
  6. })

$lte

语法:{ field: { $lte: value} }

释义:匹配小于等于(<=)指定值的文档

  1. 查询age <= 20的文档
  2. db.person.find({
  3. age: {
  4. $lte: 20
  5. }
  6. })

$ne

语法:{field: {$ne: value} }

释义:匹配不等于(≠)指定值的文档

  1. 查询age 20的文档
  2. db.person.find({
  3. age: {
  4. $ne: 20
  5. }
  6. })

$in

语法:{ field: { $in: [, , ... ] } }

释义:匹配数组中的任一值

举例:

  1. 查询该集合中字段qty的值与数组中的任意值相等的文档:
  2. db.inventory.find( { qty: { $in: [ 5, 15 ] } } )

$nin

语法:{ field: { $nin: [ , ... ]} }

释义:不匹配数组中的值

逻辑操作

$or

语法:{ $or: [ { }, { }, ... , { } ] }

释义:或 条件查询

举例:

  1. 查询age < 20或者addressbeijing的文档:
  2. db.person.find( { $or: [ { age: { $lt: 20 } }, { address: "beijing" } ] } )

$and

语法:{ $and: [ { }, { } , ... , { } ] }

释义:与 条件查询

$not

语法:{ field: { $not: { } } }

释义:查询与表达式不匹配的文档

举例:

  1. 查询age不大于20的文档:
  2. db.person.find( { age: { $not: { $gt: 20 } } } )

$nor

语法:{ $nor: [ { }, { }, ... { } ] }

释义:查询与任一表达式都不匹配的文档

举例:

  1. 查询age既不等于20sex也不是男的文档:
  2. db.person.find( { $nor: [ { age: 20 },{ sex: "男"} ] } )

集合字段操作 ——“存在”、“类型”

$exists

语法:{ field: { $exists: } }

释义:查询存在指定字段的文档

举例:

  1. 查询存在phone字段的文档:
  2. db.person.find( { phone: { $exists: true } } )

$type

语法:{ field: { $type: | } }

释义:查询类型为指定类型的文档,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" } } );

运算操作

$mod

语法:{ field: { $mod: [ 除数, 余数 ] } }

释义:取余条件查询

举例:

  1. 查询age字段的值除以20的文档:
  2. db.person.find( { age: { $mod: [ 2, 0 ] } } )

$regex

语法:

{ : { $regex: /pattern/, $options: '' } }

{ : { $regex: 'pattern', $options: '' } }

{ : { $regex: /pattern/ } }

释义:正则表达式查询

举例:

  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; } } );

数组操作

$all

语法:{ < field >: { $ all : [ < value1 > , < value2 > ... ] } }

释义:匹配文档的数组字段中包含所有指定元素的文档

举例:

  1. 查询articles集合中tags字段(是个数组)包含“ssl”和“security”的文档(包含,但并不是全部等于)
  2. db.articles.find( { tags: { $all: [ [ "ssl", "security" ] ] } } )

$elemMatch(query)重要

语法:{ : { $elemMatch: { , , ... } } }

释义:匹配内嵌文档或数组中的部分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: }

释义:匹配数组长度为指定大小的文档

举例:

  1. 查询已经集齐了5张福卡的文档:
  2. db.person.find({card:{$size:5}})

查询相似document操作

$(projection)

释义:查询数组中首个匹配条件的元素

举例:

假设现有如下集合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的document中"grades"中字段的第一个元素:

  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 }

$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个,并只显示(limit10个元素(即21-30):
  6. db.posts.find( {}, { comments: { $slice: [ 20, 10 ] } } )
  7. 4)同理,跳过后20个,并显示10个:
  8. db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } )

更新

字段更新

$inc

语法:{ $inc: { : , : , ... } }

释义:将文档中的某个field对应的value自增/减某个数字amount

举例:

  1. _id1的文档的age字段在原来的基础上+1
  2. db.person.update( { _id: 1 }, { $inc: { age: 1} })

$mul

语法:{ $mul: { field: } }

释义:将文档中的某个field对于的value做乘法操作

举例:

  1. _id1的文档的price值乘以1.25并更新:
  2. db.products.update( { _id: 1 }, { $mul: { price: 1.25 } })

$rename

语法:{$rename: { : , : , ... } }

释义:重命名文档中的指定字段的名

举例:

  1. _id1的文档的nickname字段重命名为aliascell字段重命名为mobile
  2. db.person.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )

$setOnInsert

语法:

db.collection.update( , { $setOnInsert: { : , ... } }, { upsert: true })

释义:配合upsert操作,在作为insert时可以为新文档扩展更多的field

举例:

  1. _id1的文档的item字段更改为apple,并插入新字段defaultQty,值为100
  2. db.products.update( { _id: 1 }, { $set: { item: "apple" }, $setOnInsert: { defaultQty: 100 } }, { upsert: true })

$set

语法:{ $set: { : , ... } }

释义:更新文档中的某一个字段,而不是全部替换

举例:

假设现有文档:

  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: { : "", ... } }

释义:删除文档中的指定字段,若字段不存在则不操作

举例:

  1. 删除_id1的文档的name字段
  2. db.person.update( { _id: 1}, { $unset: { name:"" } })

$min

语法:{ $min: { : , ... } }

释义:将文档中的某字段与指定值作比较,如果原值小于指定值,则不更新;若大于指定值,则更新

举例:

  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: { : , ... } }

释义:与$min功能相反

$currentDate

语法:{ $currentDate: { : , ... } }

释义:设置指定字段为当前时间

举例:

  1. db.person.update( { _id: 1 }, { $currentDate: { "lastLogin": { $type: "timestamp" } } })

数组更新

$(update)

语法:{ ".$" : 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: { : <-1 | 1>, ... } }

释义:删除数组中的第一个或最后一个元素,-1表示第一个,没错,第一个;1表示最后一个!

举例:

  1. db.test.update({_id:1},{$pop:{letters:-1}});

$pullAll

语法:{ $pullAll: { : [ , ... ], ... } }

释义:删除数组或内嵌文档字段中所有指定的元素

举例:

  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: { : <value|condition>, : <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 ] }

$push

语法:{ $push: { : , ... } }

释义:往数组中追加指定的元素,若文档中数组不存在,则创建并添加指定元素,自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使用表示往数组元素中的指定位置插入元素

MongoDB中“$”操作符表达式汇总的更多相关文章

  1. MongoDB 条件操作符

    描述 条件操作符用于比较两个表达式并从mongoDB集合中获取数据. 在本章节中,我们将讨论如何在MongoDB中使用条件操作符. MongoDB中条件操作符有: (>) 大于 - $gt (& ...

  2. python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中

    原文地址: python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中

  3. MongoDB学习3 $操作符表达式大全及实例

    from : http://blog.csdn.net/qq_16313365/article/details/58599253 1.查询和投影   1.1 比较操作符 $eq 语法:{ <fi ...

  4. MongoDB逻辑操作符$or, $and,$not,$nor

    $or是一个逻辑or操作符操作在一个数据或者多个表达式并且需要选择至少一个满足条件的表达式,$or有至少以下表达式: { $or: [ { <expression1> }, { <e ...

  5. mongodb 常用操作符

    最近常用mongodb数据库,但是很多操作符不清楚或不知道,所有抽空根据手册整理下,以便于以后查阅(基于3.4版本) 1.查询和投影操作符 1.1比较操作符 $eq 匹配字段值等于指定值的文档 { & ...

  6. C语言操作符/表达式及其作用总结

    一.算术操作符:+ - * / % 1. 除了 %操作符之外,其他的 几个操作符可以作 用于整数和浮点数. 2. 对于"/"操作符如果两个操作数都为整数,执行整数除法.而只要有浮点 ...

  7. Mongodb 基础 查询表达式

    数据库操作 查看:show dbs; 创建:use dbname; // db.createCollection('collection_name');    隐式创建,需要创建的数据库中有表才表示创 ...

  8. Python爬虫数据保存到MongoDB中

    MongoDB是一款由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储方式类似于JSON对象,它的字段值可以是其它文档或数组,但其数据类型只能是String文本型. ...

  9. MongoDB $type 操作符

    描述 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1 String 2 Object 3 ...

随机推荐

  1. SSL/TLS All In One

    SSL/TLS All In One HTTPS SSL/TLS 的工作原理 https://www.websecurity.digicert.com/zh/cn/security-topics/ho ...

  2. vue & child component & props

    vue & child component & props vue pass data to child component https://vuejs.org/v2/guide/co ...

  3. Flutter Navigator2.0

    Example 1 import 'package:dart_printf/dart_printf.dart'; import 'package:flutter/material.dart'; cla ...

  4. JS实现点击加载更多效果

    适用场景:后端直接把所有的文章都给你调出来了,但是领导又让做点击加载更多效果...(宝宝心里苦啊)   点击加载更多效果:         第一个和第二个参数分别是btn和ul的DOM(必填)     ...

  5. Python3网络爬虫-- 使用代理,轮换使用各种IP访问

    # proxy_list 代理列表 run_times = 100000 for i in range(run_times): for item in proxy_list: proxies = { ...

  6. Redis 内存淘汰机制详解

    一般来说,缓存的容量是小于数据总量的,所以,当缓存数据越来越多,Redis 不可避免的会被写满,这时候就涉及到 Redis 的内存淘汰机制了.我们需要选定某种策略将"不重要"的数据 ...

  7. C++教程01:计算机系统的组成

    教程首发 | 公众号:lunvey 学习C++之前,需要先了解一点基础的计算机知识.毕竟C++是跑在计算机系统上的,我们写的程序都是一段段的指令集. 首台计算机ENIAC问世之后,缺少原理指导.冯诺依 ...

  8. 后端程序员之路 45、nginx CORS 跨域

    在提供api给其它应用使用时,有时我们会要限制它的跨域使用,而有时,我们又要用CORS来打破AJAX只能同源使用的限制 跨域资源共享 CORS 详解 - 阮一峰的网络日志http://www.ruan ...

  9. 【python3】 解:import导包机制

    模块和包 模块:我们定义的.py结尾的文件就是一个模块,模块中通常定义了类.方法.变量等一系列功能: 包:存放模块的文件夹,含有init.py文件,定义path属性. import语句的作用 impo ...

  10. PAT-1150(Travelling Salesman Problem)旅行商问题简化+模拟图+简单回路判断

    Travelling Salesman Problem PAT-1150 #include<iostream> #include<cstring> #include<st ...