一、 MongoDB 查询语法
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
AND 条件
db.collection.find({key1:value1, key2:value2})
OR条件
db.collection.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
AND 和 OR 联合使用
db.collection.find({key1:value1,$or: [
{key2: value2}, {key3:value3}
]})
1、查询指定字段返回
_id为默认返回的字段,不让_id返回,则标记为0,需要返回的字段标记为1,如下:
db.up_user.find({"userId":860},{"nickname":1,"role":1,"_id":0})
2、数组条件Query
操作符 | 含义 |
---|---|
$in | 包含其一 |
$nin | 不包含任何之一 |
$all | 全部匹配,但不求顺序 |
$ne | 不等于 |
db.up_user.find({"userId":{$in:[860,1391]}},{"userId":1,"nickname":1,"role":1,"_id":0})
3、区间条件Query
db.up_user.find({"userId": {"$gte" :1380, "$lte" :1391}},{"userId":1,"nickname":1,"role":1,"_id":0})
日期:
reconstructed_date: {$lte: {ISODate("2013-09-25T13:37:00.000Z")}, $gte: {ISODate("2013-10-15T14:56:00.000Z")}}
4、判断元素是否存在 $exists
db.up_user.find({"orderList":{$exists :true}},{"userId":1,"nickname":1,"role":1,"orderList":1,"_id":0})
5、在嵌套字段上查询
如果需要在嵌套的字段上查询,使用点 .来连接。
db.up_user.find({"orderList.userid":7252},{"userId":1,"nickname":1,"role":1,"orderList":1,"_id":0})
二、 MongoDB 其他操作
t y p e 、 type、 type、group、$size
命令/方法 | 含义 |
---|---|
remove | |
limit | 读取指定数量的数据记录 |
skip | 跳过指定数量的数 |
sort | 指定排序的字段,并使用 1 和 -1 来指定排序的方式 |
createIndex | 创建索引 |
aggregate | 处理数据(诸如统计平均值,求和等),并返回计算后的数据结果 |
count | 查询结果总数 |
三、 MongoDB 聚合
db.sales.aggregate([
// 第一个阶段(筛选)
{
$match : {}
},
// 第二阶段(分组)
{
$group : {
}
},
// 第三阶段(排序)
{
$sort : { }
}
])
命令/方法 | 含义 |
---|---|
$match | 用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 |
$group | 按指定的_id表达式对输入文档进行分组,并针对每个不同的分组输出文档。 |
$project | 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 |
$limit | 用来限制MongoDB聚合管道返回的文档数。 |
$skip | 在聚合管道中跳过指定数量的文档,并返回余下的文档。 |
$unwind | 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 |
$sort | 将输入文档排序后输出。 |
$geoNear | 输出接近某一地理位置的有序文档。 |
1、$match 查询
db.up_user.aggregate([{"$match":{"userId":{"$in":[860,1391]}}}])
2、$group 分组
{
$group:
{
_id: <expression>, // 分组表达式
<field1>: { <accumulator1> : <expression1> },
...
}
}
_id :强制必须存在。可以为 null,其余的计算字段是可选的,并使用运算符计算。
db.up_user.aggregate(
[
{$match:{
"userId":{$in:[860,1391]}
}
}
,
{$group:{
_id:"$userId",
count:{$sum:1}
}
}
]
)
db.up_user.aggregate(
[
{$match:{
"oderList":{$exists :true},"userId":{$gt:1180,$lt:111391},"role":{$gt:0}
# _id: { month: { $month: "$createTime" }, day: { $dayOfMonth: "$createTime" }, year: { $year: "$createTime" } }
}
}
,
{$group:{
_id:"$role",
count:{$sum:1}
}
}
,
{"$sort":{count:-1}}
]
)
3、$聚合函数
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | |
$avg | 计算平均值 | |
$min | 获取集合中所有文档对应值得最小值。 | |
$max | 获取集合中所有文档对应值得最大值。 | |
$push | 在结果文档中插入值到一个数组中。 | |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | |
$first | 根据资源文档的排序获取第一个文档数据。 | |
$last | 根据资源文档的排序获取最后一个文档数据 |
四、 MongoDB 文档操作
1、插入文档
方法 | 说明 |
---|---|
insert | 若插入的数据主键已经存在,则抛出异常 |
save | save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃 |
insertOne | 向集合插入一个新文档 |
replaceOne | |
insertMany | 向集合插入一个多个文档 |
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)
- document:要写入的文档。
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered:指定是否按顺序写入,默认 true,按顺序写入。
2、更新文档
方法 | 说明 |
---|---|
update | 用于更新已存在的文档 |
save | save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃 |
replaceOne | |
updateOne | |
updateMang |
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
- query : update的查询条件。
- update : update的对象和一些更新的操作符(如,$inc…)等
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
操作符 | 含义 |
---|---|
$set | 布局修改器,修改某一值 |
$inc | 增加数量 |
$mul | 乘以数量 |
$rename | 修改字段名 |
$unset | 删除字段 |
$min | min可以将给出的值与当前文档字段值进行比较,当给定值较小时则修改当前文档值为给定值。 |
$max | $max可以将给出的值与当前文档字段进行比较,当给定值较大时则修改当前文档值为给定值 |
$push修改器 | 修改数组对象 |
$addToSet | 如果目标数组存在此项则不操作,不存在此项则加进去 |
3、删除文档
db.up_user.remove({}),
db.up_user.remove({key,value}),