MongoDB基本操作

db.createCollection('for_test')

db.getCollection('for_test').save({'_id':3,'results':[75,88]})

db.getCollection('for_test').find({'results':{'$elemMatch':{'$gte':80,'$lt':85}}})

db.getCollection('for_test').find({'results':{'$size':2}})




  • 投影

image

.$ 字段是否显示

db.getCollection('test_projection').find({'semester':1,grades:{'$gte':85}},{'grades.$':1})

image

$elemMatch 
限制结果集中数组字段,元素为满足条件的第一个

db.getCollection('test_projection').find({'grades':{'$elemMatch':{ '$gte':90 }}})

image

聚合管道
  • 语法格式 db.collection.aggregate(pipeline,options)

pipeline操作数组,有执行顺序

  • pipeline
  1. $project
    决定显示或不显示,字段名字投影别的名字,还可以修改结果值

  2. $match 过滤collection 同query

  3. $limit 限制最终结果的条数

  4. $skip 限制返回记录的起点

  5. unwind 将每个文档中的指定数组字段分隔,形成多条文档数据

  6. group 分组聚合 {$group:{_id:分组条件字段, <字段名>:{accumulato:expression}}}

KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"xxx",count_num:{$sum:1}}

  1. sort 排序 {$sort:{field1:1|-1,…}}
  2. out {$out:“collection_name”}
  3. lookup 左外连接
db.getCollection('test_aggregate').aggregate(
  [
    { '$project': {
        'item':1,
        'qty':1,
        'result':{$and:[{$gt:["$qty",100]},{$lt:["$qty",250]}]}
        }}
])

$and
$or
$not

image

image

  1. $setEquals 检查多个数组字段中元素是否相同,从第一个元素开始,可以有包含关系
{$setEquals:[["a","b","a"],["b","a"]}  true

db.getCollection('test_setEquals').aggregate([
    {$project:{
        A:1,
        B:1,
        sameElements:{
            $setEquals:["$A","$B"]
            },
        _id:0
        
        }}
])

image

image

  • setIntersection 取出多个数组字段中元素的交集,无顺序

{$setIntersection:[array1,array2,…]}

db.getCollection('test_setEquals').aggregate([
    {$project:{
        A:1,
        B:1,
        sameElements:{
            $setEquals:["$A","$B"]
            },
        commonToBoth:{
            $setIntersection:["$A","$B"]
            },
        _id:0
        
        }}
])

image

$setUnion 多个数组并集,对顺序无要求

image

$setDifference
取两个不同元素,对顺序无要求

db.getCollection('test_setEquals').aggregate([
    {$project:{
        A:1,
        B:1,
        sameElements:{
            $setEquals:["$A","$B"]
            },
        commonToBoth:{
            $setIntersection:["$A","$B"]
            },
        allValues:{
            $setUnion:["$A","$B"]
            },
        inBOnly:{
            $setDifference:["$B","$A"]
            },
        _id:0
        
        }}
])

image

$setIsSubset

db.getCollection('test_setEquals').aggregate([{$project:{
        A:1,B:1,
        sameElements:{
            $setEquals:["$A","$B"]
            },
        commonToBoth:{
            $setIntersection:["$A","$B"]
            },
        allValues:{
            $setUnion:["$A","$B"]
            },
        inBOnly:{
            $setDifference:["$B","$A"]
            },
        AisSubset:{
            $setIsSubset:["$A","$B"]
            },
        _id:0
        
        }}
])

$cmp 比较两个值是否相等,1第一个大于第二个,-1第一个小于第二个

db.getCollection('test_aggregate').aggregate(
    [ {
        $project:{
            item:1,
            qty:1,
            cmpTo250:{$cmp:["$qty",250]},
            _id: 0
            }
        }]
)

image

  • $seq
db.getCollection('test_aggregate').aggregate(
    [ {
        $project:{
            item:1,
            qty:1,
            cmpTo250:{$cmp:["$qty",250]},
            qtyEq250:{$eq:["$qty",250]},
            _id: 0
            }
        }]
)

gte lt lte ne

image

  • 算术表达式

  • KaTeX parse error: Expected '}', got 'EOF' at end of input: …bs 返回字段值的绝对值 {abs:{}}

  • KaTeX parse error: Expected '}', got 'EOF' at end of input: add {add:[<>,<>]}

  • KaTeX parse error: Expected '}', got 'EOF' at end of input: …ract 减法,可以是日期 {subtract:[<>,<>]}

  • multiply 乘法
    {$multiply:[<>,<>]}

  • divide 除法
    {$divide:[<4>,<2>]} 2

  • mod 取模运算
    {$mod:[<4>,<3>]} 1

  • ceil 返回大于等于指定数字的最小整数 向右取整
    {KaTeX parse error: Expected 'EOF', got '}' at position 10: ceil: 7.8}̲ 8 {ceil: -2.8} -2

  • floor 返回小于等于指定数字的最大整数 向左取整
    {KaTeX parse error: Expected 'EOF', got '}' at position 10: ceil: 7.8}̲ 7 {ceil: -2.8} -3

  • pow 指数 x^y

  • sqrt 开方运算

  • trunc 保留整数

  • concat 字符串连接 $concat:[str1,str2,…]

  • substr 截取字符串 s u b s t r : [ substr:[ substr:[fileds,strat,end]

  • toLower str转小写

  • toUpper str转大写

  • strcasecmp str比较

  • cond 条件表达式 {$cond:{if: <> , then :<> , else :<> }}

  • ifNull 判断一个字段是否为null,如果不是,返回原值

  • 数组表达式

  • arrayElemAt 返回数组指定位置元素
    {$arrayElemAt: [[1,2,3,4,5] ,0]} 返回1

  • concatArrays 拼接多个数组合并后返回

image

  • filter 数组过滤
    {$filter:{input:,as:,cond:}}
    input 表达式或字段 必须是数组
    as 数组内的元素定义为一个变量引用
    cond 表达式用于过滤数组

  • isArray 判断是否数组

image

  • size 返回数组元素个数

  • slice 截取数组 {$slice:[ array , position, n ] | [array , n] }

  • map 对数组里的每个元素进行操作并返回操作后新元素数组
    {$map:{input:<>, as:<>, in:<>}}
    input 数组或者返回数组的表达式
    as 将input的数组内的元素定义变量引用
    in 用于新元素的生成,并替换掉原值

db.getCollection('test_map').aggregate([
    {
        $project:{
            adjustedGrades:{
                $map:{
                    input:"$quizzes",
                    as:'grade',
                    in: {$add:["$$grade",2]}
                    }
                },
            quizzes:1             
            }
        }
])

image

实际发现并不能够替换原数组内的值,而是返回新数组  不知道是不是用的方式导致
db.getCollection('test_let').aggregate([
{
    '$project':{
        finalTotal:{
            $let:{
                vars:{
                    total:{$add:["$price","$tax"]},
                    discounted:{}
                    
                    }
                }
            }
        }
    }
])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值