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 } } );
db.collection.find({ "field"
: { $lt: value } } );
db.collection.find({ "field"
: { $gte: value } } );
db.collection.find({ "field"
: { $lte: value } } );
如查询j大于3,小于4:
db.things.find({j : {$lt: 3}});
db.things.find({j : {$gte: 4}});
也可以合并在一条语句内:
db.collection.find({ "field"
: { $gt: value1, $lt: value2 } } );
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类似,但是他需要匹配条件内所有的值:
如有一个对象:
下面这个条件是可以匹配的:
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
} } );
db.things.find( { a : { $exists : false
} } );
8) $type
$type
基于 bson
type来匹配一个元素的类型,像是按照类型ID来匹配,不过我没找到bson类型和id对照表。
db.things.find( { a : { $type : 2 } } );
db.things.find( { a : { $type : 16 } } );
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
-
-
BasicDBObject or1 = new
BasicDBObject();
-
or1.put("x"
,
new
BasicDBObject(
"$gt"
,
1002
));
-
-
BasicDBObject or2 = new
BasicDBObject();
-
or2.put("x"
,
new
BasicDBObject(
"$lt"
,
204
));
-
-
ArrayList<DBObject> list = new
ArrayList<DBObject>();
-
list.add(or1);
-
list.add(or2);
-
query.put("$or"
,list);
-
-
-
query.put("y"
,
new
BasicDBObject(
"$gt"
,
63
));
以上的mongoDB语法对应到sql就是
-
where
(x > 1002
or
x < 204)
and
y > 63
以上出自:http://www.iteye.com/topic/1008790
分享到:
相关推荐
MongoDB 是一种流行的 NoSQL 数据库,以文档型数据存储为主,支持丰富的查询表达能力。在本题中,我们将探讨 MongoDB 的查询操作,基于提供的 `user1` 和 `user2` 文档进行练习。 首先,让我们熟悉一下 `db.users....
MongoDB 查询语法详解 MongoDB 是一个基于NoSQL的数据库,具有高效、灵活、易扩展等特点。在 MongoDB 中,查询语法是非常重要的一部分,本文将对 MongoDB 的查询语法进行详细的介绍。 基本查询语法 在 MongoDB 中...
如果您不习惯MongoDB查询语言,那么Studio3T的SQL查询可能会派上用场。编写SQL选择表达式和SQL联接来查询mongodb,并查看SQL查询如何转换为MQL——这是一个很好的工具。SQL查询语言
在Thinkphp中使用MongoDB进行多条件查询时,需要对框架提供的驱动进行一定的修改以适应MongoDB的查询方式。 在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的...
MongoDB 高级查询用法大全 MongoDB 作为一个 NoSQL 数据库,提供了多种高级查询方式,以下是 MongoDB 高级查询用法大全: 一、比较运算符 在 MongoDB 中,比较运算符用于比较字段的值,常用的比较运算符有: * $...
本文将深入探讨如何验证MongoDB查询性能并进行优化。 首先,我们需要理解MongoDB的查询机制。MongoDB使用查询解释器来解析和执行查询操作。通过`explain()`方法,我们可以获取查询的执行计划,包括扫描的文档数量、...
MongoDB 提供了多种高级查询方法,包括: * 条件查询:使用 `$gt`、`$lt`、`$gte`、`$lte` 等操作符。 * 高级查询条件操作符:<, , >, >= 等。 * `$all` 匹配所有。 * `$exists` 判断字段是否存在。 * `$mod` 取模...
mongodb查询数据,显示DBCursor.next这种形式,那如何把值带到JSP显示呢? 上传的是一个项目Demo,导入可以直接运行,当然也可以直接查看其中的代码。 项目是使用jquery.ajax显示后台返回的Json串。 若再详细了解...
插入文档可以通过`db.collection.insert()`或`db.collection.insertMany()`完成,查询则可以使用丰富的查询语言,包括基本查询、聚合框架和正则表达式匹配等。修改文档可以使用`db.collection.update()`,删除文档则...
首先,我们要了解MongoDB查询的基本原理。MongoDB使用查询解释器来解析查询语句,并生成执行计划。执行计划决定了数据如何被检索,包括使用的索引、数据读取顺序等。你可以通过`db.collection.explain()`方法来查看...
一个是用Scala编写的MongoDB查询指定域语言 示例代码: val query = Venue where (_.venuename eqs "Starbucks")query.count()query.countDistinct(_.mayor)query.fetch()query.fetch(n)query.get() // equivalent...
在测试脚本`mselectmongodb.py`中,定义了一个`SqlToMongo`类,包含了执行MongoDB查询的方法`m_sql()`。`gen_load()`函数用于启动每个进程,并调用`m_sql()`执行随机查询。在主程序中,创建了一个包含101个进程的...
真实有效的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查询语句。 - 监控工具:显示服务器状态,如内存使用、磁盘空间和操作统计等。 在实际工作中,根据需求和环境,开发者和DBA可能会选择其中一个或两者结合来管理MongoDB...
关于标签"java"和"spring",这提示了MongoDB与Java和Spring框架的集成。Java驱动是连接MongoDB的主要方式之一,它允许Java开发者使用API来操作数据库。Spring Data MongoDB是一个强大的库,简化了在Spring应用中使用...
本章主要内容包括理解查询一个电子商务数据模型、MongoDB查询语言的细节、查询选择器及其选项。 MongoDB查询语言不同于传统的SQL,而是采用类JSON的查询语法。书中通过实际的电子商务场景来解释查询操作,如商品、...
4. 查询执行:在IDEA内直接编写和执行MongoDB查询语句,实时查看结果,支持复杂的聚合框架操作。 5. 脚本执行:支持运行JavaScript脚本,对数据库进行更复杂的操作。 6. 导入导出:可以将数据导入或导出为JSON、CSV...
本课程是一套关于MongoDB应用开发的实战性教程,名为《深入浅出MongoDB应用实战开发(基础、开发指南、系统管理、集群及系统架构)》,教程侧重于讲解MongoDB的常用特性及高级特性,从实际开发的角度出发对MongoDB...
使用 Redis 缓存您的 Mongoose MongoDB 查询结果。查询速度提高 300%!mongoose-redis 缓存用于在 Redis 中缓存 Mongoose MongoDB 查询结果的插件。精益数据库查询,速度至少提高 300%!2014 年 5 月 30 日 - 关于此...