`
long2010
  • 浏览: 56412 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

关于mongoDB的查询

阅读更多
mongodb查询的语法

 

本文参考自官方的手册:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ConditionalOperators%3A%3C%2C%3C%3D%2C%3E%2C%3E%3D


1 ) . 大于,小于,大于或等于,小于或等于

$gt:大于
$lt:小于
$gte:大于或等于
$lte:小于或等于

例子:

db.collection.find({ "field"

 : { $gt: value } } );   // greater than  : field > value


db.collection.find({ "field"

 : { $lt: value } } );   // less than  :  field < value


db.collection.find({ "field"

 : { $gte: value } } );  // greater than or equal to : field >= value


db.collection.find({ "field"

 : { $lte: value } } );  // less than or equal to : field <= value

如查询j大于3,小于4:

db.things.find({j : {$lt: 3}});
db.things.find({j : {$gte: 4}});

也可以合并在一条语句内:

db.collection.find({ "field"

 : { $gt: value1, $lt: value2 } } );    // value1 < field < value

 

 

2) 不等于 $ne

例子:

db.things.find( { x : { $ne : 3 } } );

 

 



3) in 和 not in ($in $nin)

语法:

db.collection.find( { "field"

 : { $in : array } } );

例子:

db.things.find({j:{$in: [2,4,6]}});

 

db.things.find({j:{$nin: [2,4,6]}});




4) 取模运算$mod

如下面的运算:

db.things.find( "this

.a % 10 == 1"

)

可用$mod代替:

db.things.find( { a : { $mod : [ 10 , 1 ] } } )




5)  $all

$all和$in类似,但是他需要匹配条件内所有的值:

如有一个对象:

{ a: [ 1, 2, 3 ] }

下面这个条件是可以匹配的:

db.things.find( { a: { $all: [ 2, 3 ] } } );

但是下面这个条件就不行了:

db.things.find( { a: { $all: [ 2, 3, 4 ] } } );



6)  $size

$size是匹配数组内的元素数量的,如有一个对象:{a:["foo"] },他只有一个元素:

下面的语句就可以匹配:

db.things.find( { a : { $size: 1 } } );

官网上说不能用来匹配一个范围内的元素,如果想找$size<5之类的,他们建议创建一个字段来保存元素的数量。

You cannot use $size to find a range of sizes (for example: arrays with more than 1 element). If you need to query for a range, create an extra size field that you increment when you add elements.

 

7)$exists

$exists用来判断一个元素是否存在:

如:

db.things.find( { a : { $exists : true

 } } ); // 如果存在



元素



a,就返回




db.things.find( { a : { $exists : false

 } } ); // 如果不存在元素a,就返回





8)  $type

$type 基于 bson type来匹配一个元素的类型,像是按照类型ID来匹配,不过我没找到bson类型和id对照表。

db.things.find( { a : { $type : 2 } } ); // matches if

 a is a string


db.things.find( { a : { $type : 16 } } ); // matches if

 a is an int




9)正则表达式

mongo支持正则表达式,如:

db.customers.find( { name : /acme.*corp/i } ); // 后面的i的意思是区分大小写



10)  查询数据内的值

下面的查询是查询colors内red的记录,如果colors元素是一个数据,数据库将遍历这个数组的元素来查询。

db.things.find( { colors : "red"

 } );



11) $elemMatch

如果对象有一个元素是数组,那么$elemMatch可以匹配内数组内的元素:

> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } ) 
{ "_id"

 : ObjectId("4b5783300334000000000aa9"

),  
"x"

 : [ { "a"

 : 1, "b"

 : 3 }, 7, { "b"

 : 99 }, { "a"

 : 11 } ]
}
$elemMatch : { a : 1, b : { $gt : 1 } } 所有的条件都要匹配上才行。

注意,上面的语句和下面是不一样的。

> t.find( { "x.a"

 : 1, "x.b"

 : { $gt : 1 } } )


$elemMatch是匹配{ "a" : 1, "b" : 3 },而后面一句是匹配{ "b" : 99 }, { "a" : 11 }


12)  查询嵌入对象的值

db.postings.find( { "author.name"

 : "joe"

 } );

注意用法是author.name ,用一个点就行了。更详细的可以看这个链接: dot notation

举个例子:

> db.blog.save({ title : "My First Post"

, author: {name : "Jane"

, id : 1}})

如果我们要查询 authors name 是Jane的, 我们可以这样:

> db.blog.findOne({"author.name"

 : "Jane"

})

如果不用点,那就需要用下面这句才能匹配:

db.blog.findOne({"author"

 : {"name"

 : "Jane"

, "id"

 : 1}})

下面这句:

db.blog.findOne({"author"

 : {"name"

 : "Jane"

}})

是不能匹配的,因为mongodb对于子对象,他是精确匹配。

 

13) 元操作符 $not 取反

如:

db.customers.find( { name : { $not : /acme.*corp/i } } );
db.things.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );

mongodb还有很多函数可以用,如排序,统计等,请参考原文。

mongodb目前没有或(or)操作符,只能用变通的办法代替,可以参考下面的链接:

http://www.mongodb.org/display/DOCS/OR+operations+in+query+expressions

 

以上出自:http://hi.baidu.com/farmerluo/blog/item/2d15e95027aa86501138c27a.html

 

 

 

  1. // x 大于 1002 或者 x 小于 204   
  2. BasicDBObject or1 = new  BasicDBObject();  
  3. or1.put("x" new  BasicDBObject( "$gt" 1002 ));  
  4.   
  5. BasicDBObject or2 = new  BasicDBObject();  
  6. or2.put("x" new  BasicDBObject( "$lt" 204 ));  
  7.               
  8. ArrayList<DBObject> list = new  ArrayList<DBObject>();  
  9. list.add(or1);  
  10. list.add(or2);  
  11. query.put("$or" ,list);  
  12.   
  13. //另外一个对y的查询过滤  y > 63   
  14. query.put("y" new  BasicDBObject( "$gt" , 63 ));  

 以上的mongoDB语法对应到sql就是

Sql代码  收藏代码
  1. where  (x > 1002  or  x < 204)  and  y > 63  

 

以上出自:http://www.iteye.com/topic/1008790

分享到:
评论

相关推荐

    MongoDB查询练习题及答案

    MongoDB 是一种流行的 NoSQL 数据库,以文档型数据存储为主,支持丰富的查询表达能力。在本题中,我们将探讨 MongoDB 的查询操作,基于提供的 `user1` 和 `user2` 文档进行练习。 首先,让我们熟悉一下 `db.users....

    mongoDB-查询语法

    MongoDB 查询语法详解 MongoDB 是一个基于NoSQL的数据库,具有高效、灵活、易扩展等特点。在 MongoDB 中,查询语法是非常重要的一部分,本文将对 MongoDB 的查询语法进行详细的介绍。 基本查询语法 在 MongoDB 中...

    mongodb查询工具Studio3T

    如果您不习惯MongoDB查询语言,那么Studio3T的SQL查询可能会派上用场。编写SQL选择表达式和SQL联接来查询mongodb,并查看SQL查询如何转换为MQL——这是一个很好的工具。SQL查询语言

    Thinkphp使用mongodb数据库实现多条件查询方法

    在Thinkphp中使用MongoDB进行多条件查询时,需要对框架提供的驱动进行一定的修改以适应MongoDB的查询方式。 在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的...

    MongoDB高级查询用法大全

    MongoDB 高级查询用法大全 MongoDB 作为一个 NoSQL 数据库,提供了多种高级查询方式,以下是 MongoDB 高级查询用法大全: 一、比较运算符 在 MongoDB 中,比较运算符用于比较字段的值,常用的比较运算符有: * $...

    MongoDB查询性能验证及优化

    本文将深入探讨如何验证MongoDB查询性能并进行优化。 首先,我们需要理解MongoDB的查询机制。MongoDB使用查询解释器来解析和执行查询操作。通过`explain()`方法,我们可以获取查询的执行计划,包括扫描的文档数量、...

    MongoDB实验 - .docx

    MongoDB 提供了多种高级查询方法,包括: * 条件查询:使用 `$gt`、`$lt`、`$gte`、`$lte` 等操作符。 * 高级查询条件操作符:&lt;, , &gt;, &gt;= 等。 * `$all` 匹配所有。 * `$exists` 判断字段是否存在。 * `$mod` 取模...

    mongodb查询数据返回JSP

    mongodb查询数据,显示DBCursor.next这种形式,那如何把值带到JSP显示呢? 上传的是一个项目Demo,导入可以直接运行,当然也可以直接查看其中的代码。 项目是使用jquery.ajax显示后台返回的Json串。 若再详细了解...

    五、MongoDB 学习PPT

    插入文档可以通过`db.collection.insert()`或`db.collection.insertMany()`完成,查询则可以使用丰富的查询语言,包括基本查询、聚合框架和正则表达式匹配等。修改文档可以使用`db.collection.update()`,删除文档则...

    mongodb查询性能.rar

    首先,我们要了解MongoDB查询的基本原理。MongoDB使用查询解释器来解析查询语句,并生成执行计划。执行计划决定了数据如何被检索,包括使用的索引、数据读取顺序等。你可以通过`db.collection.explain()`方法来查看...

    MongoDB查询指定域语言Rogue.zip

    一个是用Scala编写的MongoDB查询指定域语言 示例代码: val query = Venue where (_.venuename eqs "Starbucks")query.count()query.countDistinct(_.mayor)query.fetch()query.fetch(n)query.get() // equivalent...

    1亿条记录的MongoDB数据库随机查询性能测试

    在测试脚本`mselectmongodb.py`中,定义了一个`SqlToMongo`类,包含了执行MongoDB查询的方法`m_sql()`。`gen_load()`函数用于启动每个进程,并调用`m_sql()`执行随机查询。在主程序中,创建了一个包含101个进程的...

    MONGOdb视频教程地址.txt

    真实有效的mongodb视频教程地址 深入浅出 MongoDB 高清IT教程视频下载 1.1、-nosql与MongoDB.mp4 1.2、-MongoDB安装配置.mp4 1.3、-MongoDB?shell详.mp4 1.4、-MongoDB文档、集合、... 2.4、-MongoDB查询语法3.mp4

    mongodb管理工具

    - 查询构建器:帮助用户构建和执行MongoDB查询语句。 - 监控工具:显示服务器状态,如内存使用、磁盘空间和操作统计等。 在实际工作中,根据需求和环境,开发者和DBA可能会选择其中一个或两者结合来管理MongoDB...

    MongoDB的安装文件,补丁以及可视化工具

    关于标签"java"和"spring",这提示了MongoDB与Java和Spring框架的集成。Java驱动是连接MongoDB的主要方式之一,它允许Java开发者使用API来操作数据库。Spring Data MongoDB是一个强大的库,简化了在Spring应用中使用...

    《MongoDB实战》第2版-第5章-Mongodb查询1

    本章主要内容包括理解查询一个电子商务数据模型、MongoDB查询语言的细节、查询选择器及其选项。 MongoDB查询语言不同于传统的SQL,而是采用类JSON的查询语法。书中通过实际的电子商务场景来解释查询操作,如商品、...

    idea mongodb插件

    4. 查询执行:在IDEA内直接编写和执行MongoDB查询语句,实时查看结果,支持复杂的聚合框架操作。 5. 脚本执行:支持运行JavaScript脚本,对数据库进行更复杂的操作。 6. 导入导出:可以将数据导入或导出为JSON、CSV...

    如何安装MongoDB 如何使用MongoDB

    本课程是一套关于MongoDB应用开发的实战性教程,名为《深入浅出MongoDB应用实战开发(基础、开发指南、系统管理、集群及系统架构)》,教程侧重于讲解MongoDB的常用特性及高级特性,从实际开发的角度出发对MongoDB...

    使用 Redis 缓存您的 Mongoose MongoDB 查询结果 查询速度提高 300%!.zip

    使用 Redis 缓存您的 Mongoose MongoDB 查询结果。查询速度提高 300%!mongoose-redis 缓存用于在 Redis 中缓存 Mongoose MongoDB 查询结果的插件。精益数据库查询,速度至少提高 300%!2014 年 5 月 30 日 - 关于此...

Global site tag (gtag.js) - Google Analytics