数据库

 首页 > 数据库 > MongoDB > MongoDB数据库查询指南

MongoDB数据库查询指南

分享到:
【字体:
导读:
         摘要:1.多查询条件向查询文档加入多个键/值对的方式可以实现多个查询条件的组合。例如要查询所有用户名为“joe”且年龄为27岁的用户,可以像下面这样:db.users.find({“username”:“joe”,“age”:27})2.指定返回结果的键例如,如果只需要用户集合的“usern...

MongoDB数据库查询指南

1.多查询条件

向查询文档加入多个键/值对的方式可以实现多个查询条件的组合。例如要查询所有用户名为“joe”且年龄为27岁的用户,可以像下面这样:

 >db.users.find({“username” : “joe”, “age” : 27})

2.指定返回结果的键

例如,如果只需要用户集合的“username”和“email”键感兴趣,可使用如下查询:

 >db.users.find({}, {“username” : 1, “email” : 1})

同时也可以剔除查询结果中的某个键/值对,例如如果不希望结果中有“fatal_weakness”键,命令如下:

 >db.users.find({}, {“fatal_weakness” : 0})

也可以用来防止返回“_id”。

3.查询条件

“$lt”小于,”$lte”小于等于,“$gt”大于,“$gte”大于等于,“$ne”不等于,例如:

 >db.users.find({“age” : {“$gte” : 18, “$lte” : 30}})

$in类似Mysql中的IN,用法如下:

 >db.raffle.find({“ticket_no” : {“$in” : [725, 542, 390]}})

$or类似Mysql中的OR,用法如下:

 >db.raffle.find({“$or” : [{“ticket_no” : 725}, {“winner” : true}]})

$not类似Mysql中的逻辑操作符NOT,用法如:

 >db.user.find({“id_num” : {“$not” : {“$mod” : [5, 1]}}})

说明:“$mod”会将查询的值除以第一个给定值,若余数等于第二个给定值则返回该结果。

注意:一个键可以应用多个条件句,但不能对应多个更新修改器。

4.特定类型的查询

null:

null不仅仅匹配自身,而且匹配缺少这个键的所有文档。若仅仅想要匹配键值为null的文档,用法如下:

 >db.c.find({“z” : {“$in” : [null], “$exists” : true}})

正则表达式:

MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式,PCRE支持的正则表达式语法都能被MongoDB所接受。例如可以使用正则表达式执行忽略大小写的匹配,如下:

 >db.users.find({“name” : /joe/i})

数组:

若要查询数组中的元素,可以理解为每个元素都是整个键的值。例如:

>db.food.insert({“fruit” : [“apple”, “banana”, “peach”]})

那么查询“fruit”键的值中包含“banana”的文档如下:

 >db.food.find({“fruit” : “banana”})

但要是想通过多个元素来匹配数组时,要使用“$all”,例如:

 >db.food.find({“fruit” : {“$all” : [“apple”, “banana”]}})

内嵌文档:

查询内嵌文档的方法:查询整个文档,或者只针对其键/值对进行查询。例如有如下文档:

 {
          “name” : {
          “first” : “Joe”,
          “last” : “Schmoe”
 }
 “age” : 45
 }

查询整个内嵌文档如下:

 >db.people.find({“name” : {“first” : “Joe”, “last” : “Schmoe”}})

但需要注意这里的“name”键的值必须匹配整个文档。

只针对内嵌文档的特定键值进行查询如下:

 >db.people.find({“name.first” : “Joe”, “name.last” : “Schmoe”})

查询数组中嵌套内嵌文档:

若文档结构如下:

 {
          “content” : “joe”,
          “comments” : [
          {
                    “author” : “joe”,
                    “score” : 3,
                    “comment” : “nice post”
 },
 {
          “author” : “mary”,
          “score” : 6,
          “comment” : “terrible post”
 }
 ]
 }

那么要查询由Joe发表的5分以上的评论,写法如下:

 >db.blog.find({“comments” : {“$elemMatch” : {“author” : “joe”, “score” : {“$gte” : 5}}}})

5.游标

获取游标的方法如下:

 >var cursor = db.foo.find().sort({“x” : 1}).limit(1).skip(10);
 >while(cursor.hasNext()) {
 …obj = cursor.next();
 …//do stuff
 …}

这里游标类还实现了迭代器接口,可以在foreach循环中使用。

 >cursor.forEach(function(x)) {
 …print(x.name);
 });

注意:几乎所有游标对象的方法都返回游标本身,这样就可以按任意顺序组成方法链。

上述内容中的limit(n)表示限制结果的数量,只返回n个结果。而skip(n)表示略过前n个文档,然后返回余下的文档。sort()用一个对象作为参数:一组键/值对,值代表排序方向,排序方向可以是1(升序)或者-1(降序),如果指定了多个键,则按照多个键的顺序逐个排序。

注意:用skip略过少量的文档还是不错的,但要是数量非常多的话,skip会变得很慢,应避免过大的skip。

MongoDB数据库查询指南
分享到:
MongoDB数据库集群的配置与使用
MongoDB数据库集群的配置与使用 一、数据备份 最流行保险的办法是使用master-slave模式,然后在slave机器上先获得写入锁,让其他不能再写入,然后备份所有数据文件再解锁,这样不会影响master在系统中的使用 一般需要备份的slave的机器可以加上延时同步 MongoDB 的replication机制除了最普通的Master/Slave模式之外,...
MongoDB数据库条件查询
MongoDB数据库条件查询 下面的示例就是说明如何执行一个类似SQL的查询,  并演示了怎么在  MongoDB  里实现.  这 是在MongoDB shell里查询,  当然你也可以用其他的应用程序驱动或者语言来实现:    SELECT * FROM things WHERE name="mongo"  > db.things.find({name:"mongo"}).forEach(printjson);  { "_...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……