我设计了一个测试用例来练习MongoDb:
假定要设计一个书本的集合,有标题,页数,作者,价格,储存量,类型等属性,其中作者属性是一个数组,储存了作者对象,其包含4个属性:名,姓,年龄,性别:
1. 创建集合并插入文档
db.book.insert(
{
title:"Cat empire",
nb_page:350,
author:[
{
name:"Kitty",
surname:"Jim",
age:33,
sex:"female"},
{
name:"Kim",
surname:"Wang",
age:26,
sex:"male"
}
],
prize:25,
nb_store:89,
type:"A"
}
)
db.book.insert(
{
title:"Orange",
nb_page:240,
author:[
{
name:"Kiki",
surname:"Orange",
age:23,
sex:"female"}
],
prize:17,
nb_store:23,
type:"B"
}
)
db.book.insert(
{
title:"Cat empire 2",
nb_page:450,
author:[
{
name:"Kitty",
surname:"Jim",
age:33,
sex:"female"
},
{
name:"Kim",
surname:"Wang",
age:26,
sex:"male"
},
{
name:"Koku",
surname:"Jim",
age:65,
sex:"male"
}
],
prize:35,
nb_store:99,
type:"A"
}
)
2. 更新文档
查找到“Cat empire 2”, 更新他的数量
db.book.update(
{
title:"Cat empire 2"
},
{
$set:
{
nb_store:98
}
}
)
查找到价格高于20的书,设置类型为Z
db.book.update(
{
prize:{$gte : 20}
},
{
$set:
{
type:"Z"
}
},
false,
true
)
3. 删除文档
db.book.insert(
{
title:"Orange Delete",
nb_page:999,
prize:17,
nb_store:23,
type:"B"
}
)
db.book.insert(
{
title:"Orange Delete 2",
nb_page:980,
prize:17,
nb_store:23,
type:"B"
}
)
db.book.remove(
{
nb_page:{$gte:900}
}
)
4. 查询文档
查询库存大于50的书
db.book.find(
{
nb_store: {$gte:50}
}
).pretty()
查询包含至少一个年龄大于33的作者的书籍
db.book.find(
{
'author.age':33
}
).pretty()
查询包含至少一个作者年龄大于25或者是男性的书籍
db.book.find(
{
$or:[
{"author.age": {$gt:25}},
{"author.sex": "male"}
]
}
).pretty()
查询页数小于400,或者包含作者年龄大于30并且为女性的书籍
db.book.find(
{
$or:[
{
nb_page:{$lt:400}
},
{
"author.age":{$gt:30},
"author.sex":"female"
}
]
}
).pretty()
5. limit函数
取前两个文档
db.book.find().limit(2).pretty()
6. skip函数
跳过第一个文档
db.book.find().skip(1).pretty()
7. limit与skip复合使用
取第二个文档
db.book.find().skip(1).limit(1).pretty()
这个两个函数的组合常用于页面分页
8. 排序sort
升序排序
db.book.find().sort({nb_page:1})
9. 聚合
以type分组,取页数的平均值和库存量总数
db.book.aggregate(
[
{
$group:{
_id:"$type",
page_avg:{
$avg:"$nb_page"
},
store_sum:{
$sum:"$nb_store"
}
}
}
]
)
10. 更新author.name为kiki的作者的年龄为44
db.book.update(
{
"auther.name":"kiki"
},
{
"$set":{
"auther.$.age":44
}
}
)
11. 删除author.age为33的数组元素
db.book.update(
{"author.age":33},
{$pull: {"author": {age: 33}}}
)