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