ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:25.90KB ,
资源ID:11265758      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11265758.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java操作mongoDB使用文档.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java操作mongoDB使用文档.docx

1、Java操作mongoDB使用文档Java Driver for MongoDB开发前准备:1.MongoDB连接url(e.g. localhost:27017)2. mongo-java-driver-2.9.3.jar(目前最新版)3.www.mongodb.org(用来查看api和帮助文档)一、 连接MongoDB/ MongoDB连接对象private Mongo mongoDBServer;/ 根据host:port获取MongoDB连接对象mongoDBServer = new Mongo( host, port );/ 数据库名private String database;/

2、 从连接对象中获得相应数据库对象DB db = mongoDBServer.getDB( database );至此,我们已经打开了一个mongodb的连接,并且已经获得一个名为database的数据库(mongodb中成为collection集合)。下面对这个集合进行增删改查操作。进行操作前。我们需要先使用数据库对象获取表(mongodb中的集合对象)。/ 获得名为person的表(又称集合)DBCollection dbcol = db.getCollection( person );二、 新增操作(Add)/ 新建一个map对象,将需要保存的数据放入map中map.put(key,val

3、ue);./ 用map对象创建一个MongoDB自带的DBObject对象用作插入操作参数DBObject param = new BasicDBObject( map );/ 调用数据库集合对象的insert方法,传入DBObject对象执行插入操作WriteResult result = dbcol.insert( param );WriteResult对象是操作返回结果,我们可以用如下方法判断操作是否出错if ( result.getError() != null ) System.out.println( result.getError() );至此新增操作完成。三、 修改操作(upd

4、ate)修改操作其实和新增操作的方法一样,唯一不同的地方是将以往我们编写SQL语句的操作改为创建mongodb查询json串。这里mongodb的update方法比较复杂,此处只演示其中一种方法,具体的请各位自行googleXX。(查询参数见:附录)params.put( age, 30 );/ 更新参数DBObject param = new BasicDBObject( $set, params );/ 更新条件DBObject condition = new BasicDBObject( personId, personId : hedaxing );WriteResult result

5、 = dbcol.update( condition, param );if ( result.getError() != null ) System.out.println( result.getError() );这里用到了$set操作符,更新age字段。四、 查询操作(get)DBCollection dbcol = db.getCollection( person );DBObject param = new BasicDBObject( params );/ 获取age20即查询age小于等于20的用户2. db.user.find(age:$not:$gt:20)3. #这里查询a

6、ge不是1,6,11,16.等的用户4. db.user.find(age:$not:$mod:5,1)2、条件查询与更新修改器1. #更新修改器2. db.users.update(age:23,$set:name:zzzz)3. #条件查询4. db.users.find(age:$gt:20)条件句是内层文档键,修改器是外层文档键。而且对同一个字段age来说可以是多个限定条件,但是修改器不能对应多个3、null如果某个字段的值为null,根据null来查询时可以返回该条文档,但也会返回不包含该字段的文档1. #新增两条数据2. db.users.insert_id:7,age:23,na

7、me:joe3. db.users.insert_id:8,age:24,friends:null,name:sam查询键值为null的字段1. db.users.find(friends:null)。这里会返回friends为null的文档,但是也会返回没有该键的文档1. _id:7,age:23,name:joe2. _id:8,age:24,friends:null,name:sam需要通过$exists来判定键值是否存在1. db.users.find(friends:$in:null,$exists:true)2. _id:8,age:24,friends:null,name:rrb

8、in4、正则表达式1. #这里会返回所有name中包含rob字段的文档2. db.users.find(name:/rob/)3. #不仅对字段值进行正则匹配,如果值本身是正则式也匹配4、数组查询插入几条数据测试1. db.food.insert(_id:1,fruit:apple,banana,peach)2. db.food.insert(_id:2,fruit:apple,orange)3. db.food.insert(_id:3,fruit:banana,peach,orange)以下是一些常用的查询方法,直接上1. #匹配fruit中包含banana的文档2. db.food.fi

9、nd(fruit:banana)3. #必须匹配所有4. db.food.find(fruit:$all:apple,peach)5. #精确匹配6. db.food.find(fruit:apple,orange)7. #指定下标key.index8. db.food.find(fruit.2:peach)9. #查询指定长度的数组10. db.food.find(fruit:$size:3)但是$size操作只能严格匹配,遇到比如要求数组大于或者小于之类的查询就无能为力了。这里提供了解决的方案:对文档新增size字段,每次对数组push或pop操作时,对size字段做相应的增减。查询的时候

10、再对字段size做相应的处理1. db.food.update($push:fruit:strawberry,$inc:size:1)2. db.food.find(size:$gt:3)返回数组指定子集$slice用于返回数组的一个子集,支持前、后或者偏移1. db.food.insert(_id:4,fruit:apple,banana,peach,orange,watermelon,lemon,cherry)2. #取前2个3. db.food.find(_id:4,fruit:$slice:2)4. #u_id:4,ufruit:uapple,ubanana5. #取后两个6. db.

11、food.find(_id:4,fruit:$slice:-2)7. #u_id:4,ufruit:ulemon,ucherry8. #从第2个开始取三个,这个其实达到分页的效果,但书中明确指出对大量数据skip性能下降厉害,不建议考虑这种方式9. db.food.find(_id:4,fruit:$slice:2,3)10. #u_id:4,ufruit:upeach,uorange,uwatermelon使用$slice获取数组内的值时,其他的键也会默认返回,如果不需要返回非数组内的其他键这里可以指明,与前面返回不同的是这里可以用01. db.food.insert(_id:5,sum:7

12、,fruit:apple,banana,peach,orange,watermelon,lemon)2. db.food.find(_id:5,fruit:$slice:2,3,_id:0,sum:0)3. ufruit:upeach,uorange,uwatermelon5、查询内嵌文档这里主要考虑匹配查询内嵌文档,考虑如下文档1. db.users.insert(_id:9,age:23,name:first:joe,last:sam)2. db.users.insert(_id:10,age:24,name:first:joe,middle:dd,last:sam)查询名字为joe sa

13、m的用户1. #查询名字为joesam的用户2. data=db.users.find(name:first:joe,last:sam)3. #返回第一条,实际上这相当于精确匹配,这个查询条件将严格匹配顺序、字段的数量。其实第二条也是我们想要的结果,那么正确的写法应该是:4. data=db.users.find(name.first:joe,name.last:sam)书中说到一种复杂情况下的查询:joe发表的5分以上的评论:1. db.blog.insert(_id:1,content:.,comments:name:joe,score:3,comment:nice,name:sam,sc

14、ore:5,comment:zzz,name:joe,score:5,comment:good)2. data=db.blog.find(comments:name:joe,score:$gte:5)3. #这样是查不到数据的,内嵌文档要求匹配整个文档,而不是comments键4. data=db.blog.find(comments.name:joe,comments.score:$gte:5)5. #这个查询会返回这条记录,其实是匹配的commets中各个键,即joe匹配第一条,score匹配第二条6. data=db.blog.find(comments:$elemMatch:name:

15、joe,score:$gte:5)6、分页分页在前面说到$slice时,其实是达到分页的效果,前面也说了弊端,这里进一步说明。这里采用limit限制返回结果,slice跳过指定数量文档,sort对查询结果排序limitdb.users.find().limit(3)结果集超过三条返回三条,不足返回实际数量,貌似对负数不感冒,比如-2还是返回前两条,或者limit里没有偏移这个概念skipdb.users.find().limit(3)省略结果集前三个,返回剩下的,结果集不足三个就啥都木有了,当然这个也一样,别写负数了,否则抛异常sort对结果集排序:1升序,-1降序。可支持多个键/对1. db

16、.users.find().sort(name,1),(age,-1)Shell代码1. db.users.find().sort(name:1,age:-1)1. #这就是分页2. db.users.find().limit(2).sort(_id,1)3. db.users.find().limit(2).skip(2).sort(_id,1)4. db.users.find().limit(2).skip(4).sort(_id,1)这对大数据量的skip性能影响较大,这里也提供了一些绕过的方法。比如先取得最后一条的记录的某个唯一键,再查询大于该键的值。可以看出这个限制条件挺多,当然容易想到的采用主键_id,这是主键必须是数字了还有其他的一些高级特性,如$where、随机获取、包装查询、获取一致性结果等,这里就不一一举例说明了,有兴趣的自己搜索吧。Update OperatorsF

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1