`

mongodb基本操作

阅读更多
要换一种新的数据库注定要转变很多观念,以前认为可行的方式或思维,现在可能就行了,用mongodb做一个基本的CRUD也不是件容易的事,我甚至开始怀疑它是否真的有人们说的那么好,当然再自己还没有完全理解mongodb的前提下这种话还是少说点为好。
今天花了些时间试了一下基本的查询,其与mysql的JDBC查询确有很多不同。当然与Hibernate的面向对象查询也有些不同,思维真的要转变一下才行。
要了解mongodb的基本操作,最需要了解的对象就是DBCollection,这可能是整个JAVA驱动程序中最重要的一个类,当然这个类的方法也特别的多,最基本的查询方式如下:

DB db = mongo.getDB("users");
DBCollection coll = db.getCollection("userCollection3");
DBCursor cur = coll.find();
while(cur.hasNext()) {
  System.out.println(cur.next());
}


这是最基本的查询,常用的查询方法有以下几个:
find()
find( DBObject ref )
find( DBObject ref , DBObject keys )


find(DBObject ref)的基本用法:

DBObject query = new BasicDBObject();
//条件查询
query.put("userTable", "Users");

DBCursor cur = coll.find(query);
while(cur.hasNext()) {
  System.out.println(cur.next());
}

如果一个对象有很多字段,而用户只需要使用其中的某些字段,可以选择性查询需要的字段,这样可以减少网络流量,这就是上面的第三个查询方法的用法,如果只需要使用userTable字段,可以这样:

query.put("userTable", 1);
DBCursor cur = coll.find(new BasicDBObject(),query);


因为_id,_ns的值是必需返回的,所以总共会返回每条记录的_id,_ns,userTable三个字段的值。还需要注意的是不能直接通过_id字段来查找记录,至少目前没有做成功过,这一点我也不知道是为什么,于是在mongodb的客户端用命令试了一下,结果还是一样,用_id字段还是查不出东西来。_id值是系统自动生成的,如果想自定义_id的值,只需在保存对象之前覆盖_id的值即可。

官方给出一个数字条件查询的例子,也有些参考价值:

query = new BasicDBObject();
query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));  //  20 < i <= 30
cur = coll.find(query);

while(cur.hasNext()) {
   System.out.println(cur.next());
}


另外还有些方法专门用来过虑或筛选记录的方法,如果要分页查询,就会用到这些方法,主要有两个方法:

/**
     * Discards a given number of elements at the beginning of the cursor.
     * @param n the number of elements to skip
     * @return a cursor pointing to the new first element of the results
     * @throws RuntimeException if the cursor has started to be iterated through
     */
    public DBCursor skip( int n )

/**
     * Limits the number of elements returned.
     * @param n the number of elements to return
     * @return a cursor pointing to the first element of the limited results
     */
    public DBCursor limit( int n )


由于本人着实有些懒,所以不一翻译。


如果查询某一条记录,可以使用以下方法:
findOne()
findOne( DBObject o )
findOne( DBObject o, DBObject fields )


上面方法使用的基本方式与find系列方法完全一样,只是它们只返回其中的一条记录。

讲完查询,讲一讲关于怎样修改记录。既然不能直接通过_id查询记录,那么修改的时候也会麻烦一点,修改对象的方法主要有两种,第一种是用save方法:

......
DBObject q = coll.findOne(user);
q.put("userTable", "Users2");
coll.save(o);


第二种是用update方法修改对象:

DBObject q = coll.findOne(user);

DBObject o = new BasicDBObject();
o.put("name", "fansof");
o.put("password", "java");

coll.update(q, o);


可以看出通过update方法修改时,可以把原来的对象替换成新的对象,哪怕新的对象的结构与原来对象的字段结构不一样也可以。所以使用update更新时,需非常谨慎才行。

额外讲点东西,深入一下update会发现,update也有几种形式:

public abstract DBObject update( DBObject q , DBObject o , boolean upsert , boolean multi ) throws MongoException ;
public DBObject update( DBObject q , DBObject o ) throws MongoException {
        return update( q , o , false , false );
}
public DBObject updateMulti( DBObject q , DBObject o ) throws MongoException {
        return update( q , o , false , true );
}


其实源码的注释对有些参数解释得不是很清楚,不过官方网站上正好有关于update的介绍:
/**
*db.collection.update( criteria, objNew, upsert, multi )
*Arguments:
*criteria - query which selects the record to update; 
*objNew - updated object or $ operators (e.g., $inc) which manipulate the object 
*upsert - if this should be an "upsert"; that is, if the record does not exist, insert it 
*multi - if all documents matching criteria should be updated (the default is to *only update the first document found) 
*/

上面有个参数名叫upsert,意思是:"update if present; insert is missing"。

删除相对来说,来简单一些,因为方法比较单一,如:
DBObject user = new BasicDBObject();
user.put("userTable", "用户表4");
		
DBObject o = coll.findOne(user);
coll.remove(o);



到此,mongodb的基本操作就讲完了,其它相对高级一点的用法以后有时间再试一下。
分享到:
评论
4 楼 fansofjava 2010-02-22  
不过
zxc005 写道
fansofjava 写道
原来没注意看,居然还有ObjectId这么个对象,不过现在为了生计问题,又搞上SSH了,所以也没时间关注了。

呵呵,没那么严重吧,不行你就当休闲、当陶冶情操,还期待跟你交流呢

当时用的时候,感觉键值数据库还是挺爽的,我本人挺讨厌SQL的,不过那个mongodb的JAVA驱动写得的确不怎么样,可以说算写得比较差的,仔细一想,现在的JDBC驱动都有些不足,都要经过封装才能用。不过键值数据库的驱动应该做得更好才对,因为它面对的是对象,再加上泛型、反射的话,可以实现很强的功能。但是也有一些缺点,事务这个问题不好解决,内存的问题也不好解决,事务这个问题解决起来很麻烦,主要取决于mongodb,而内存这个问题,主要取决于驱动,以前我关注过面向对象的数据库db4o这个东西,相对来说,键值数据库优势要明显一些,不过目前来说mongodb这个东西还不能拿来做企业应用,自己玩倒是过不错的选择。
3 楼 zxc005 2010-02-19  
fansofjava 写道
原来没注意看,居然还有ObjectId这么个对象,不过现在为了生计问题,又搞上SSH了,所以也没时间关注了。

呵呵,没那么严重吧,不行你就当休闲、当陶冶情操,还期待跟你交流呢
2 楼 fansofjava 2010-02-18  
原来没注意看,居然还有ObjectId这么个对象,不过现在为了生计问题,又搞上SSH了,所以也没时间关注了。
1 楼 zxc005 2010-02-17  
你这样:

ObjectId oid = new ObjectId("4b7bf702f1068027258249d8");
DBObject query = new BasicDBObject("_id", oid);
DBCursor cur = coll.find(query);

相关推荐

    MongoDB基本操作.docx

    ### MongoDB基本操作详解 #### MongoDB简介 MongoDB是一款开源的NoSQL数据库系统,以其灵活性、高性能及可扩展性著称,特别适用于Web应用的开发。MongoDB的数据模型基于文档,这意味着它存储的数据形式类似于JSON...

    MongoDB基本操作指南

    MongoDB基本操作指南 MongoDB基本操作指南 MongoDB基本操作指南MongoDB基本操作指南

    Mongodb基本操作

    MongoDB基本操作 MongoDB是一个基于分布式文件存储的NoSQL数据库,具有高性能、可扩展性强、易于使用等特点。下面将详细介绍MongoDB的基本操作。 一、启动和停止MongoDB 1. 启动MongoDB:使用以下命令启动MongoDB...

    MongoDB基本操作-读取MongoDB中的数据.pdf

    ### MongoDB基本操作——读取MongoDB中的数据 #### 一、引言 MongoDB是一款流行的NoSQL数据库系统,因其灵活性和高性能而广泛应用于各种场景。本文档将指导您完成从MongoDB读取数据的基本操作。这包括连接到MongoDB...

    MongoDB基本操作手册1

    "MongoDB基本操作手册1" MongoDB 是一种开源、高性能、无模式的文档数据库,主要应用于解决高并发、海量数据的访问和存储,对数据库的高扩展性和高可用性。常见应用场景包括社交、游戏、物流、物联网、直播等等。 ...

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

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

    玩转MongoDB4.0从入门到实践、MongoDB基本操作之CRUD、进阶之聚合、中索引的重要性、数据分片

    #### 二、MongoDB基本操作之CRUD 这一章节将详细介绍MongoDB中的基本操作——创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete),即CRUD操作: 1. **插入文档**:利用`insert`或`insertOne`命令插入单个...

    MongoDB若基本操作

    在这个“MongoDB基本操作”的主题中,我们将深入探讨如何使用MongoDB进行数据的增删改查以及其它关键操作。 1. **安装与启动MongoDB** - 在不同的操作系统(如Windows、Linux或macOS)上安装MongoDB的步骤略有不同...

    MongoDB基本操作之Python篇

    了解save()与insert()在数据插入上的区别,熟悉update()方法在数据更新上的应用,以及会用drop()和remove()进行数据的删除,再结合find()和find_one()方法进行高效的数据查询和字段筛选,是进行MongoDB操作的基础。...

    MONGODB基本操作封装类

    将mongodb的基本操作,增删查询等封装为一个基本类供人调用

    MongoDB基础操作指南.rar

    本指南将深入探讨MongoDB的基本操作,帮助你更好地理解和掌握这个强大的NoSQL数据库系统。 一、安装与启动MongoDB MongoDB的安装相对简单,提供Windows、Linux和macOS等平台的二进制包。在安装完成后,通过命令行...

    mongoDb 基本操作 整理word

    本文主要概述了MongoDB的基本操作,包括安装、启动、数据库管理以及集合的操作。 首先,安装MongoDB非常简单,可以从官方网站下载适合您系统的版本。在Windows环境下,可以选择不解压或解压模式来运行。不解压模式...

    mongodb 数据库基本操作.doc

    ### MongoDB数据库基本操作详解 #### 一、连接MongoDB数据库 MongoDB是一个广泛使用的开源文档数据库,支持多种编程语言。为了能够与MongoDB交互并执行各种数据库操作,首先需要通过官方提供的驱动程序或其他第三...

    MongoDB数据库操作指南与优化技巧

    内容概要:本文档详细介绍了MongoDB的基本概念与核心技术,涵盖了数据模型、MongoDB基础操作(如insert、find、update等)、术语、索引建立以及查询优化等方面的知识点,并涉及到了安全性和性能调优的内容。...

    MongoDB基础(自己总结不喜勿喷)

    总结来说,MongoDB的基础操作涵盖了数据库的基本管理、数据的增删改查,而副本集和分片则是其在高可用性和可扩展性方面的核心特性。通过深入理解和熟练掌握这些知识,可以有效地利用MongoDB处理大规模的分布式数据...

    mongodb数据库的基本操作

    在本文中,我们将深入探讨“mongodb数据库的基本操作”,包括增、删、改、查以及分页功能。 首先,让我们从创建数据库开始。在MongoDB中,数据库是存储数据的基本单位。通过运行`use &lt;database_name&gt;`命令,你可以...

    掌握MongoDB:NoSQL数据库基础与高级特性教程.rar

    基本操作 数据库和集合 文档操作 查询操作 基本查询 高级查询 索引与性能优化 创建索引 索引类型 索引优化 聚合操作 聚合框架 常用聚合操作 数据库管理 备份与恢复 用户管理与权限控制 分片与复制 复制集 分片 实战...

Global site tag (gtag.js) - Google Analytics