小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
基本操作
use database | 进入相应的数据库,如果没有则自动创建 |
---|---|
db | 表示当前所处的数据库 |
show collections | 显示数据库中所有的数据表格 |
db..insert(bson); | 向集合中插入数据(id自动创建) |
db..find(); | 查找集合中的所有数据 |
db..insertOne(bson); | 插入一个数据对象 |
db..insertMany(bson); | 插入多个数据对象 |
db..find(bson); | 查询符合条件的文档数据 |
db..findOne(bson); | 查询符合条件集合的第一个数据 |
查询表达式 |
$eq | = |
---|---|
$lt | < |
$lte | <= |
$gt | > |
$gte | >= |
$in | 包含 |
$nin | 不包含 |
$ne | != |
/*
查询num大于500
*/
db.teach.find(
{
name:{$gt:500}
}
);
/*
查询符合条件前2条记录
*/
db.teach.find({
name:"hello"
}).limit(2);
/*
查询符合条件的11-20数据
skip是跳过几条
*/
db.teach.find().skip(10).limit(10);
/**
多条件查询
*/
db.ExpressTrajectoryLog.find({
$and : [
{"createTime" : {$lte : ISODate("2018-06-30T18:00:00.000+0000")}},
{"createTime" : {$gte : ISODate("2018-06-11T18:00:00.000+0000")}},
{ $or :
[
{ "trajectoryStatus" : "ETP01"} ,
{ "trajectoryStatus" : "ETP010"} ,
{ "trajectoryStatus" : { "$regex" : "^ESE"}}
]
}
]
}).sort({
"createTime": 1,
"creatorId": 1
});
内嵌文档查询
内嵌文档查询主要是对数组的元素进行筛选
网站:https://blog.csdn.net/drifterj/article/details/7833883
修改
/*
修改
$set修改指定属性
$unset删除指定的属性
update 默认只能修改符合查询条件的其中之一的文档对象
updateOne 只能修改一个
updateMany 同时修改多个
*/
db.teach.update(
{name:"hello"},
{
$set:{age:15}
}
);
db.teach.updateOne(
{name:"hello"},
{
$unset:{age:15}
}
);
db.teach.updateMany(
{name:"hello"},
{
$unset:{age:15}
}
);
删除
--删除所有
db.teach.remove({});
文档之间的关系
一对多、多对一
db.user.insert(
[
{
name:"user1"
},
{
name:"user2"
}
]
);
db.order.insert(
[
{
list:["or1","or2"],
user:ObjectId("5b0e14177edb099ce17a3d97")
},
{
list:["or3","or4"],
user:ObjectId("5b0e14177edb099ce17a3d98")
}
]
);
一对一
多对多
db.user.insert(
[
{
name:"user1"
},
{
name:"user2"
}
]
);
db.order.insert(
[
{
list:["or1","or2"],
user:[
ObjectId("5b0e14177edb099ce17a3d97"),
ObjectId("5b0e14177edb099ce17a3d98")
]
},
{
list:["or3","or4"],
user:[
ObjectId("5b0e14177edb099ce17a3d98"),
ObjectId("5b0e14177edb099ce17a3d97")
]
}
]
);
sort和投影
sort根据指定的字段排序, 1 -升序 -1 -降序
db.teach.find({}).sort({age:1})
投影:显示自己想要的字段
db.teach.find({},{name:1})
aggregate
操作符 | 对应的含义 |
---|---|
$project | 数据投影,主要用于重命名、增加和删除字段 |
$match | 用于查询,相当于find,用法和find一样 |
$group | 将集合中的文档分组,可用于统计结果 |
$sort | 排序 |
$limit | 相当于mysql中的limit |
$skip | 跳过几行 |
$unwind | 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值 |
需求:查询出每天每人送货数量
db.order.aggregate(
[
{
"$match":{
"inDate":{"$lte":"2018-05-31","$gte":"2018-05-28"}
}
},
{
"$group":{
"_id":{"userId":"$userId","inDate":"$inDate"},
"count":{$sum:1}
}
},
{
"$sort":{
"_id.userId":1
}
},
{
"$project":{
"_id":0,
"userId":"$_id.userId",
"inDate":"$_id.inDate",
"count":1
}
}
]
)
group
操作符 | 对应的含义 |
---|---|
key | 排序的字段 |
inital | 每个文档都分享这个初始化函数 |
reduce | 这个函数的第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象。有多少个文档, $reduce就会调用多少次 |
condition | 过滤函数 |
finalize | 在整体执行完之后进行的方法 |
db.order.group(
{
key:{"name":1,"inDate":1,"userId":1},
initial:{"count":0},
reduce:function(doc,out){out.count++;},
condition:{"inDate":{"$gte":"2018-05-12","$lte":"2018-05-31"}},
finalize:function(out){return out;}
}
);
将结果集导出为excel