`

mongodb实践 2

阅读更多

接上一篇:

 

#删除数据

 

*删除某条数据@

> db.things.remove({i:1});

		> db.things.find({i:1});
		> db.things.find({i:2});
		{ "_id" : ObjectId("4ee8510a0c16000000006ec7"), "i" : 2, "i2" : 4 }
		{ "_id" : ObjectId("4ee8514d0c16000000006edb"), "i" : 2, "i2" : 4, "i3" : 8 }
 

db.things.remove()会删除things聚集中的所有数据。

甚至可以删除聚集本身@

db.things.drop()

 

#更新数据

 

*mongodb官方建议,如果仅仅是更改某些域,那么使用$modifiers 更加合适~

写道

a modifier update has the advantages of avoiding the latency involved in querying and returning the object.
The modifier update also features operation atomicity and very little network data transfer.
 

*modifiers有如下操作@

写道

$inc 自增/自减
$set 赋值
$unset 删除某个列
$push 追加到原有值后
$pushAll 追加数组到原有值后
$addToSet and $each 向数组添加一个元素/向数组添加多个元素
$pop 移除某个数组元素(-1表示第一个、1表示最后一个)
$pull 移除指定的数组元素
$pullAll 移除多个指定的数组元素
$rename 更新域名
$bit 按位操作,仅限整型
 

*将客户joy的年龄+1@

> db.customers.find({name:"joy"});

		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "name" : "joy", "age" : 22 }
		> db.customers.update({name:"joy"},{$inc:{age:1}});
		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "name" : "joy", "age" : 23 }
 

再添加两条数据@

db.customers.save({name:"joy",age:23});db.customers.save({name:"joy",age:23});

 

如何将所有joy的年龄都变为24呢?

试一下前面的方法@

> db.customers.update({name:"joy"},{$inc:{age:1}});

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "name" : "joy", "age" : 24 }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "name" : "joy", "age" : 23 }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "name" : "joy", "age" : 23 }
 

很遗憾只改变了第一条数据:(

update的语法为:db.customers.update(query, object[, upsert_bool, multi_bool])

 ,有两个可选参数,我们没有用到,官网上对这几个参数的解释是@

写道

query 查询哪些记录需要被更新
object 需要更新的域
upsert 如果为true则有记录时更新记录,没有记录时添加一条新记录(默认值似乎是true)
multi 决定到底是更新所有查询到的记录还是只更新一条(默认值似乎是false)
 

再试一下@

> db.customers.update({name:"joy"},{$inc:{age:1}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "name" : "joy", "age" : 25 }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "name" : "joy", "age" : 24 }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "name" : "joy", "age" : 24 }
 

所有名字叫joy的客户的年龄都增大了一岁。

现在把25岁的joy改成24岁,可以这么来@

> db.customers.update({name:"joy",age:25},{$set:{age:24}});

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "name" : "joy", "age" : 24 }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "name" : "joy", "age" : 24 }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "name" : "joy", "age" : 24 }
 

这样在customers中就有三个名字和年龄都相同的客户了:)

添加一个性别域@

> db.customers.update({name:"joy",age:24},{$set:{gender:"m"}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 24, "gender" : "m", "name" : "joy" }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 24, "gender" : "m", "name" : "joy" }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "gender" : "m", "name" : "joy" }
 

删除该域@

> db.customers.update({name:"joy",age:24},{$unset:{gender:"m"}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 24, "name" : "joy" }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 24, "name" : "joy" }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy" }
 

经过一些步骤,现在数据库中3个joy的年龄不同了,接下来给他们加一个数组域,记录他们的订单记录@

> db.customers.update({name:"joy"},{$push:{orders:"1000"}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
 

再试试$pushAll@

> db.customers.update({name:"joy",age:22},{$pushAll:{orders:["1001","1002"]}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ "1000", "1001", "1002" ] }
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
 

试试$addToSet and $each@

> db.customers.update({name:"joy",age:22},{$addToSet:{orders:{$each:["1003","1004"]}}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ "1000", "1001", "1002", "1003", "1004" ] }
 

$pop把数组元素弹出@

> db.customers.update({name:"joy",age:22},{$pop:{orders:1}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ "1000", "1001", "1002", "1003" ] }
		> db.customers.update({name:"joy",age:22},{$pop:{orders:-1}},true,true);
		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ "1001", "1002", "1003" ] }
 

$push也可以把数组元素弹出@

> db.customers.update({name:"joy",age:22},{$pull:{orders:"1002"}},true,true);

		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ "1001", "1003" ] }
		> db.customers.update({name:"joy",age:22},{$pullAll:{orders:["1001","1003"]}},true,true);
		> db.customers.find({name:"joy"});
		{ "_id" : ObjectId("4ee99ce18b12000000004f86"), "age" : 23, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee99d0f8b12000000004f87"), "age" : 24, "name" : "joy", "orders" : [ "1000" ] }
		{ "_id" : ObjectId("4ee98be10b240000000027f3"), "age" : 22, "name" : "joy", "orders" : [ ] }
 

把orders修改为customer_orders@

> db.customers.update({name:"joy"},{$rename:{orders:"customer_orders"}},true,true);

		Invalid modifier specified $rename
 

很遗憾:(查了资料才发现$rename这个命令在Version 1.7.2+ 以后才有,而$bit这个命令Version 1.7.5+之后才有。我的测试版本@

> db.version();

		1.6.5
 

*最后一点,关于$的用法:$相当有用,官网的解释是@

写道

The $ operator (by itself) means "position of the matched array item in the query". Use this to find an array member and then manipulate it.
 

$指的就是在一次查询中匹配的数组项的位置,通过使用$可以找到数组元素并操作它。(翻译的不好,满头大汗:|)

定义一个文章+评论的数据模式@

> archive = {title:"mongodb learning",author:"someone",comments:[{by:"joy",votes:1},{by:"tim",votes:3}]}

		{
			"title" : "mongodb learning",
			"author" : "someone",
			"comments" : [
				{
					"by" : "joy",
					"votes" : 1
				},
				{
					"by" : "tim",
					"votes" : 3
				}
			]
		}
		> db.archives.insert(archive);
		> db.archives.find();
		{ "_id" : ObjectId("4ee9ad938b12000000004f88"), "title" : "mongodb learning", "author" : "someone", "comments" : [ { "by" : "joy", "votes" : 1 }, { "by" : "tim", "votes" : 3 } ] }
 

将joy的评论votes加1@

> db.archives.update({'comments.by':"joy"},{$inc:{'comments.$.votes':1}},false,true);

		> db.archives.find({author:"someone"});
		{ "_id" : ObjectId("4ee9ad938b12000000004f88"), "title" : "mongodb learning", "author" : "someone", "comments" : [ { "by" : "joy", "votes" : 2 }, { "by" : "tim", "votes" : 3 } ] }
 

先到这里,接下来学学Index:)
分享到:
评论

相关推荐

    MongoDB简介与实践.pdf

    2. 正确认识NoSQL: 存在关于NoSQL的一些误解,比如:认为NoSQL数据库完全不使用SQL语句,或者将所有非关系型数据库都划分为NoSQL,以及认为需要完全放弃使用关系型数据库。实际上,NoSQL = Not Only SQL,即除了SQL...

    springboot整合mongodb实践操作

    springboot整合mongodb实践操作

    Mongodb最佳实践

    Mongodb是主流的NOSQL数据库之一,Mongodb最佳实践,详细介绍了Mongodb使用以及底层原理,和运维管理; 1.Mongodb数据结构,以及存储方式 2.增删改查使用,分页,排序,投影,以及多种扩展使用 3.丰富查询语句,比如...

    mongodb 最佳实践

    MongoDB最佳实践是指一系列用于部署和管理MongoDB数据库的高级策略和技术,旨在确保数据库的高效运行、数据安全、以及系统的稳定性和可扩展性。MongoDB是一种高性能、可扩展的分布式文档数据库,广泛用于现代应用...

    视觉中国的MongoDB应用实践.pdf

    ### 视觉中国的MongoDB应用实践 #### 一、背景介绍 随着业务需求的变化和技术的发展,视觉中国在2011年的QCon北京会议上分享了其采用MongoDB作为数据库解决方案的过程与实践经验。这一转变旨在应对多数据源的需求、...

    网易游戏MongoDB数据备份与恢复实践.pdf

    网易游戏MongoDB数据备份与恢复实践 本文将详细介绍网易游戏MongoDB数据备份与恢复实践,涵盖了MongoDB在网易游戏端游数据中心的应用、扩展性、业务需求、priority=0资源情况等多方面的内容,并对MongoDB在网易游戏...

    关系型数据库迁移MongoDB实践.pptx

    【关系型数据库迁移MongoDB实践】的PPT涵盖了从规划到实施的整个迁移过程,重点关注Schema设计、应用迁移和数据迁移。以下是对这些关键知识点的详细说明: 1. **迁移规划**:在进行数据库迁移时,规划是至关重要的...

    mongodb 官方资料

    -涵盖了将数据从RDBMS移至MongoDB时的最佳实践和注意事项 MongoDB现代化记分卡 -使用它来确定哪些现有的旧版应用程序适合迁移到MongoDB 实践Medical_Claims_RDBMS_ERD和Medical_Claims_MongoDB -此方案适用于...

    MongoDB 性能最佳实践

    在使用 MongoDB 构建高性能应用时,了解并实践性能优化策略至关重要。本篇文章将深入探讨 MongoDB 的性能最佳实践,旨在帮助你充分利用其潜力。 1. **数据模型设计** - **合适的文档结构**:设计紧凑且逻辑清晰的...

    万亿级文档数据库MongoDB集群性能优化实践.pdf

    知识点2: 解决 MongoDB 集群抖动问题 MongoDB 集群抖动问题是 MongoDB 集群中常见的问题。解决这个问题需要优化 MongoDB 集群,提高 MongoDB 集群的稳定性和可用性。 知识点3: MongoDB 性能优化方法 MongoDB ...

    nosql实验六- MongoDB的安装与基本操作.docx

    MongoDB 安装与基本操作 MongoDB 是一款流行的 NoSQL 数据库,广泛应用于大数据和实时 Web 应用程序。在本实验中,我们将学习如何在 Windows 和 Linux 环境下安装 MongoDB,并了解 MongoDB 的基本操作。 一、...

    2020年最新MongoDB 4.0专讲从入门到精通视频教程.txt

    day2:MongoDB运行环境搭建及运行 day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合操作 day5:索引的特性及应用 day6:MongoDB实例搭建仓位管理API day7:数据模型优化及设计 day8:复制集介绍及演练 day9:海量...

    mongodb-测试数据

    2. **聚合框架**:可能包含各种聚合管道示例,用于演示如何使用MongoDB的聚合功能进行数据统计和分析。 3. **索引创建和优化**:测试数据可能包含各种不同结构的文档,用于测试不同索引类型的效果,如单字段索引、...

    MongoDB开发应用实践

    #### 四、MongoDB实践效果 ##### 选择MongoDB的原因: - **读写性能适中**:虽然不如Redis出色,但足够满足需求。 - **文档模型**:MongoDB的文档模型非常适合处理复杂的、变化的数据结构。 - **集群机制**:...

    MongoDB简介与实践

    ### MongoDB简介与实践 #### MongoDB概述 MongoDB是一款先进的、基于分布式文件存储的数据库系统,其核心编程语言为C++。这款数据库系统的设计初衷是为了满足Web应用对高性能、可扩展数据存储方案的需求。MongoDB...

Global site tag (gtag.js) - Google Analytics