MongoDb 学习笔记(2)

我设计了一个测试用例来练习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}}}
)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值