MongoDB之具体使用(二)

本文详细介绍MongoDB中的数据增删改查操作,包括条件查询更新、批量更新、内嵌文档及数组的操作方法,以及如何利用聚合管道进行数据筛选、分组、排序等高级处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB之具体使用(一):
http://blog.youkuaiyun.com/qq_33733970/article/details/79109066

接上回,我们继续:

改:

语法:

db.collection.update(
   <query>,#查询条件
   <update>,#要更新的内容
   {
     upsert: <boolean>,#可选,默认false,设置为true无则添加,false没有则不做任何操作
     multi: <boolean>,#可选,默认false,false只更新第一条,true更新多条
     writeConcern: <document>#可选,抛出异常的级别
   }
)

覆盖修改:

db.user.update({“age”:20},{“name”:”quincy”})

部分修改:

db.user.update({‘_id’:2},{“$set”:{“name”:’wx’}})

新增一条:

db.user.update({“_id”:8},{“name”:”qq”},{“upsert”:true})

修改多条:

db.user.update({“_id”:5},{“$set”:{“name”:”yy”}},{“multi”:true})

修改内嵌文档:

db.user.update({“_id”:3},{“$set”:{“addr.country”:”USA”}})

修改内嵌数组:

db.user.update({“_id”:3},{“$set”:{“hobbies.1”:”泡妞”}})

删除内嵌文档($unset):

db.user.update({“_id”:3},{“$unset”:{“hobbies”:”“}})

增加和减少:$inc

db.user.update({},{“$inc”:{“age”:2}},{“multi”:true})
db.user.update({},{“$inc”:{“age”:-2}},{“multi”:true})

添加删除数组内元素

添加一个:
db.user.update({“_id”:1},{“$push”:{“hobbies”:”smoking”}})
添加多个:
db.user.update({“_id”:1},{“$push”:{“hobbies”:{“$each”:[“tatoo”,”smoking”]}}})

删除$pop,只能从数据源的两端删除,1从末尾删,-1从头删:

db.user.update({“_id”:1},{“$pop”:{“hobbies”:1}})

删除$pull,根据具体的条件删除:

db.user.update({“_id”:1},{“$pull”:{“hobbies”:”smoking”}})

避免添加重复”$addToSet”:

db.user.update({“_id”:1},{“$addToSet”:{“hobbies”:{“$each”:[“smoking”,”smoking”,”smoking”]}}})

删:

删一个:

db.user.deleteOne({“age”:18})

删多个:

db.user.deleteMany({“age”:18})

删除全部:

db.user.deleteMany({}}

聚合函数:

筛选$match:

{“$match”:{“字段”:”条件”}}

db.depart.aggregate({“$match”:{“position”:”teacher”}})

db.depart.aggregate(
    {"$match":{"_id":{"$gt":2}}},
    {"$group":{"_id":"$position","avg_sal":{"$avg":"$salary"}}}
)

db.depart.aggregate(
    {"$match":{"_id":{"$gt":2}}},
    {"$group":{"_id":"$position","avg_sal":{"$avg":"$salary"}}},
    {"$match":{"avg_sal":{"$gt":2000}}}
)
投射$project:
db.depart.aggregate(
    {"$project":{
        "_id":0,#不显示
        "name":1,#显示
        "age":1,
        "new_age":{
            "$add":["$age",1]
        }
    }}
)

常用的数学表达式,用法同上:

_ {“$add”:[expr1,expr2,…,exprN]} #相加
_ {“$subtract”:[expr1,expr2]} #第一个减第二个
_ {“$multiply”:[expr1,expr2,…,exprN]} #相乘
_ {“$divide”:[expr1,expr2]} #第一个表达式除以第二个表达式的商作为结果
_ {“$mod”:[expr1,expr2]} #第一个表达式除以第二个表达式得到的余数作为结果

日期表达式:

$year,$month,$week,$dayOfMonth,$dayOfWeek
$dayOfYear,$hour,$minute,$second

eg1:

db.depart.aggregate(
    {"$project":{"_id":0,"hire_year":{"$year":"$hire_date"}}}
)

eg2:

db.depart.aggregate({
    "$project":{
        "hire_period":{
            "$subtract":[
                {"$year":new Date()},
                {"$year":"$hire_date"}
            ]
        }
    }
})

字符串:

{“$substr”:[字符串/$值为字符串的字段名,起始位置,截取几个字节]}
{“$concat”:[expr1,expr2,…,exprN]} #指定的表达式或字符串连接在一起返回,只支持字符串拼接
{“$toLower”:expr}
{“$toUpper”:expr}

eg1:

db.depart.aggregate(
    {"$project":{
        "NAME":{"$toUpper":"$name"}
    }}
)
分组$group:

{“$group”:{“_id”:分组字段,”新的字段名”:聚合操作符}}

db.depart.aggregate({“$group”:{“_id”:”$position”}})

最高工资

db.depart.aggregate({“$group”:{“_id”:”$position”,”max_sal”:{“$max”:”$salary”}}})

工资和:

db.depart.aggregate({
    "$group":{"_id":"$position","total":{"$sum":"$salary"}}
})

最高和最低工资:

db.depart.aggregate({
    "$group":{
        "_id":"$position",
        "min_sal":{"$min":"$salary"},
        "max_sal":{"$max":"$salary"}
    }
})

统计人数:

db.depart.aggregate({
    "$group":{"_id":"$position","total_num":{"$sum":1}}
})

统计人名:

db.depart.aggregate({
    "$group":{"_id":"$position","names":{"$push":"$name"}}
})
排序$sort:

1:升序,-1:降序
{“$sort”:{“字段名”:1,”字段名”:-1}} #1升序,-1降序

db.depart.aggregate(
    {"$group":
        {"_id":"$position","names":
            {"$push":"$name"}}},
    }
)
限制$limit:
db.depart.aggregate(
    {"$group":
        {"_id":"$position","names":
            {"$push":"$name"}}},
    {"$sort":{"names":-1}},
    {"$limit":2}
)
跳过$skip:
db.depart.aggregate(
    {"$group":{"_id":"$position","names":{"$push":"$name"}}},
    {"$sort":{"names":-1}},{"$limit":2},
    {"$skip":1}
)
随机取数$sample:
db.depart.aggregate(
    {
        "$sample":{"size":3}
    }
)

本篇完结!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值