Mongodb操作与基本特性

    本文主要介绍Mongodb中CRUD常用操作、存储引擎、数据模型,以及如何使用java Driver。 一、BSON    Mongodb中数据存储格式为BSON,和JSON非常类似,可以说在整体的结构几乎一样,只不过BSON定义了更多的数据类型,这对面向对象编程语言非常友好。{ "_id": { "$oid": "55f6c87fdefdd...
摘要由CSDN通过智能技术生成

    本文主要介绍Mongodb中CRUD常用操作、存储引擎、数据模型,以及如何使用java Driver。

 

一、BSON

    Mongodb中数据存储格式为BSON,和JSON非常类似,可以说在整体的结构几乎一样,只不过BSON定义了更多的数据类型,这对面向对象编程语言非常友好。

{
    "_id": {
        "$oid": "55f6c87fdefdd10de72fc024"
    },
    "name": "zhangsan",
    "age": 30,
    "is_alive": true,
    "addresses": [
        "beijing",
        "shanghai"
    ],
    "created": {
        "$date": 1442236543707
    }
}

    文档格式大概如上所示,如果数据类型时JSON不支持的,那么数据类型也将写入文档中,比如date。BSON中有2个比较特殊的类型,其中date对应java中的Date,array对于java中List。其他类型比如boolean,string,int等与java都一一对应。

 

    在mongodb中,一条数据称为一个document,其API类为org.bson.Document,当然Document也是Bson的子类,同时也实现了Map接口,其内部有一个LinkedHashMap作为数据支撑(所以mongodb中字段是有顺序的)。

Document user = new Document()
                .append("name", "zhangsan")
                .append("age", 30)
                .append("is_alive",true)
                .append("addresses", Arrays.asList("beijing","shanghai"))
                .append("created", new Date());

    上述就是创建一个Document的过程,这和操作一个Map其实并没有太大区别。

 

二、java driver示例

    如下简单展示如何使用mongodb java客户端开发,因为下面的例子都是基于JAVA的。具体参见:“mongodb java”

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.0.3</version>
</dependency>

    创建MongoClient的方式有多种,可以参看MongoClient的构造方法即可。最终归结来由2个主要方式,一个是MongClient + MongoClientOptions,另一个是MongClient + conenctionString。例子如下,如果想在spring环境中使用,请你继续封装。关于授权登陆,SSL方面,稍后会专门介绍,此处仅为示例:

MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
//MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://127.0.0.1:27017"));
MongoDatabase db = mongoClient.getDatabase("test");//获取DB
MongoCollection<Document> collection = db.getCollection("user");//获取collection(表)
//通过collection进行CRUD操作

 

    CRUD的例子将会在下文中列举。

 

三、Read操作

    即从mongodb中读取一条或者多条数据,可以在query中使用多种复合查询条件,这种查询条件的组合类似于SQL,我们也可以使用“projection”过滤器来指定需要返回的结果中包含(不包含)哪些字段,以提升IO效率,因为Mongodb可以使用众多的类似于SQL的查询操作,而且支持多种indexes,这或许就是mongodb的亮点所在。(Mongodb之上的SQL引擎:Drill,即使用sql查询mongodb数据)

MongoCollection<Document> collection = db.getCollection("user");//获取collection(表)
//通过collection进行CRUD操作
Bson parent = Filters.eq("name", "zhangsan");
parent = Filters.and(parent,Filters.gt("age", 10));
MongoCursor<Document> cursor = collection.find(parent).sort(new Document("age", 1)).skip(10).limit(5).iterator();
try {
	while (cursor.hasNext()) {
		Document item = cursor.next();
		System.out.println(item.toJson());
	}
} finally {
	cursor.close();//must be
}

    上面例子就是一个典型的query,我们基本上可以通过多种组合,即可完成复杂的查询。我们使用了Filters API来构建查询条件,这是一个便捷的方式。当然开发者也可以自己使用mongodb的“比较指令”来自己封装:

Document filter = new Document("name",new Document("$eq","zhangsan"));

    自己封装不仅繁琐而且易于出错,建议使用Filters。

 

    1、比较符

    mongodb支持如下几种比较操作,它们均可以在query的查询条件中:$eq(相等,逐字节比较),$gt(大于),$gte(大于等于),$lt(小于),$lte(小于等于),$ne(不等于),$in(值是否在指定的数组中),$nin(值不在制定的数组中)。

    2、逻辑判断符

    $or:逻辑or,如果document匹配多个条件判断中的一个或者多个,则将此document返回。

    $and:逻辑and,document必须匹配全部的判断条件。

    $not:逻辑!,$and取反,如果document不匹配条件,则返回此document。比如:"age":{$not:{$gt:16}}表示“获取age不大于16的document”,它的内部检测过程就是“如果此document存在age字段,且大于16的,一律不返回”,言外之意是:如果document中不包含age字段,或者age的值小于等于16的均会返回。

    $nor:not or。

    3、元素

    $exists:检测文档中是否存在此字段,比如: "name":{$exists:true}表示如果name字段存在,则返回此文档。

    $type:检测文档中字段的类型,比如:"age":{$type:16}表示如果age字段的类型为int则返回此文档,参见BSON Types

   4、数组

    $all:如果字段的值是数组,$all表示此数组中包含指(不一定必须等于)定的所有元

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值