mongodb查询find(2012-01-05 11:38:10)

转载
标签:

it

分类: mongoDB

mongodb查询find

指定返回的键,通过find或findOne的第二个参数指定想要的键。

> db.visithomepage.find({},{"user_id" : 1,"time" :1})

{ "_id" : ObjectId("4e0713be3ded0ab30ccb4b81"), "user_id" : NumberLong(22715364), "time" : NumberLong(1305108928) }

把不需要看到的,改成0,比如把_id改成0,不让他回复。

> db.visithomepage.find({},{"user_id" : 1,"time" :1,"_id" : 0}) { "user_id" : NumberLong(23020418), "time" : NumberLong(1305105014) }

限制:不可以引用文档中其他键的值。

--------------------------------------------------------------------------------

查询条件:

$lt,$lte,$gt,$gte,$ne < <= > >= ≠ > db.visithomepage.find({"user_id" : { "$lte" : 23011003,"$gte" : 23010000}})

查找日期 start = new Date("01/01/2007") db.visithomepage.find({registered" : { "$lt" : start }})

Or查询 $in 和 $or > db.visithomepage.find({"user_id" : { "$in" : [23011003, 23010000]}})

当然还有$nin

$in能对单个键做查询。要是对多个键做查询,就要用$or了,$or的优化在于第一个条件竟可能的匹配更多的文档。

> db.visithomepage.find({"$or" : [{"user_id" : 23011003}, {"time" : 1305115967}]})

$nin 不包含 查询age的值在7,8 范围外的数据 db.c1.find({age:{$nin: [7,8]}});

--------------------------------------------------------------------------------

$not

他是元条件,可以用在任何其他条件之上。

例如$mod取模运算符来说, db.users.find({"user_id" : {"$mod" : [5, 1]}}) 上面的查询会返回1,6,11,16等用户。要是想返回2,3,4,5,7,8,9,10,12等用户就要用$not了 db.users.find({"user_id" : {"$not" :{"$mod" : [5, 1]}}})

--------------------------------------------------------------------------------

正则表达式 db.users.find({"name" : /zorpia/i}) 支持perl的pcre库来匹配正则表达式

查询name 不以T开头的数据 db.c1.find({name: {$not: /^T.*/}});

--------------------------------------------------------------------------------

查询数组 db.zorpia.insert({"fruit" : ["apple","banana","peach"]})

用下面的查询: db.zorpia.find({"fruit" : "banana"})

1.$all 如果需要通过多个元素来匹配数组,用$all,例如: db.zorpia.insert({"fruit" : ["apple","banana","peach"]}) db.zorpia.insert({"fruit" : ["apple","kumquat","orange"]}) db.zorpia.insert({"fruit" : ["cherry","banana","apple"]}) 要找到有apple和banana的文档,用$all db.zorpia.find({"fruit" : {$all : ["apple", "banana"]}}) 要是想查询数组指定位置的元素,则用语法指定下标,例如: db.zorpia.find({"fruit.2" :"peach"}) 上面这个会匹配第三个元素是peach的文档

2.$size数组元素个数 用来查询指定长度的数组 db.zorpia.find({"fruit" : {"$size" : 3}}) 查询3个长度的数组,但是他不能和其他查询子句组合,例如$gt

3.$slice 返回前10条评论 db.zorpia.post.findOne(criteria, { "comments" : {$slice : 10}}) 返回最后10条 db.zorpia.post.findOne(criteria, { "comments" : {$slice : -10}}) 返回24-33个元素 db.zorpia.post.findOne(criteria, { "comments" : {$slice : [23,10]}}) 不过他们都会返回所有的键

--------------------------------------------------------------------------------

查询内嵌文档 "name" : { "firstname" : "joe", "lastname" : "schmoe" }

可以用下面的查询joe schmoe的人,很烦,firstname和lastname一定要写全,而且first和last的次序不能点到。

> db.users.findOne({"name" : {"firstname":"joe","lastname" : "schmoe"}})

正确的方法,用。号 > db.users.findOne({"name.firstname":"joe"}) { "_id" : ObjectId("4e0310f40611960df1e86a95"), "emails" : [ "joe4@alexhe.net", "joe5@zorpia.com", "joe6@zorpia.com" ], "name" : { "firstname" : "joe", "lastname" : "schmoe" } } 注意,点表示法也是待插入的文档不能包含“。”。如果我们保存url就会碰到问题。解决方法是插入前或者提取后执行一个全局替换,将。替换为url中的非法字符。

当文档结构复杂后。假设有博客文章若干,要找到joe发飙的5分以上的评论。博客文章的结构如下: > db.blog.find() { "content" : "...", "comments" : [ { "author" : "joe", "score" : 3, "comment" : "nice post" }, { "author" : "mary", "score" : 6, "comment" : "6 fen" } ] } 只能用$elemMatch进行匹配。这种模糊的命名条件能用来部分指定匹配数组中的单个内嵌文档的限定条件。 db.blog.find({"comments" : { "$elemMatch" : {"author" : "joe","score" : {"$gte" : 5}}}})

--------------------------------------------------------------------------------

$where p55 它可以执行任意JavaScript作为查询的一部分。这方面我还不是很明白,以后再研究。需要大家自己研究了。

注意:尽量避免使用$where查询。速度上要比常规查询慢很多。每个文档要从bson转换成JavaScript对象,然后通过$where的表达式来运行。同样他不能利用索引。

--------------------------------------------------------------------------------

游标 var cursor = db.users.find() > while (cursor.hasNext()) { obj = cursor.next(); }

cursor.hasNext()检查时候有后续结果存在,然后用cursor.next()将其获得。

也能用forEach: var cursor = db.users.find() cursor.forEach(function(x) { print(x.name); });

--------------------------------------------------------------------------------

limit,skip和sort

limit函数,例如只返回3个结果。 db.users.find().limit(3) limit是上限,不是下限

skip与limit类似: db.users.find().skip(3) 会略过前三个匹配的文档,然后返回余下的文档。如果集合少于三个文档,则不会返回任何文档。

sort用一个对象作为参数:1代表升序,-1降序。如果指定了多个键,则按照多个键的顺序依次排序。 db.users.find().sort({"username" : 1, "age" : -1})

以上三个方法可以组合使用。处理分页很有用。例如,有人想搜索mp3。如果每页返回50个结果,而且按照价格从高到底排序: db.stock.find({"desc" : "mp3"}).limit(50).sort({"price" : -1})

下一页只要略过50个就行了。 db.stock.find({"desc" : "mp3"}).skip(50).limit(50).sort({"price" : -1})

应当避免略过过多的结果。

统计 db.things.count(); // select count(*) from things; db.things.find({ x: 10}).count(); // select count(*) from things where x=10; 以下返回的不是5,而是user 表中所有的记录数量 db.users.find().skip(10).limit(5).count(); 如果要返回限制之后的记录数量,要使用count(true)或者count(非0) db.users.find().skip(10).limit(5).count(true);

多条件查询 db.things.find( { x : 3, y : "foo" } ); // where x = 3 and y = "foo"

指定返回结果集条件 db.things.find().limit(10); // limit 10, db.things.find().skip(7).limit(10); // limit 7, 10

排序 db.things.find().sort({$natural: 1}); // order by _id ASE db.things.find().sort({$natural: -1}); // order by _id DESE db.things.find().sort({x: 1}); // order by x ASC db.things.find().sort({x: -1}); //order by x DESC db.things.find().sort({x: 1, y: -1}); // ~.~

取模 db.things.find( { x : { $mod : [ 10 , 1 ] } } ); // where x=1

与数值元素匹配 db.things.find({ x : { $in: [2, 4, 6]}}); // x in array db.things.find({ x: { $nin: [2, 4, 6]}}); // x not in array

$all 匹配所有 这个操作符跟SQL语法的in类似,但不同的是, in只需满足( )内的某一个值即可, 而$all必

须满足[ ]内的所有值,例如: db.users.find({age : {$all : [6, 8]}}); 可以查询出 {name: 'David', age: 26, age: [ 6, 8, 9 ] } 但查询不出 {name: 'David', age: 26, age: [ 6, 7, 9 ] }

$exists 判断字段是否存在

查询所有存在age字段的记录 db.users.find({age: {$exists: true}}); 查询所有不存在name字段的记录 db.users.find({name: {$exists: false}});

Null 值处理

> db.c2.find({age:null})

$mod 取模运算

查询age取模6等于1的数据

db.c1.find({age: {$mod : [ 6 , 1 ] } })

$ne 不等于

查询x的值不等于3 的数据 db.c1.find( { age : { $ne : 7 } } );

Javascript 查询和$Where查询

查询a大于3的数据,下面的查询方法殊途同归 db.c1.find( { a : { $gt: 3 } } ); db.c1.find( { $where: "this.a > 3" } ); db.c1.find("this.a > 3"); f = function() { return this.a > 3; } db.c1.find(f);

存储过程

关于存储过程你需要知道的第一件事就是它是用 javascript来写的。 MongoDB 存储过程是存储在db.system.js表中的,我们想象一个简单的sql自定义函数如下:

function addNumbers( x , y ) {

return x + y; } 下面我们将这个sql自定义函数转换为MongoDB 的存储过程:

> db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }});

存储过程可以被查看,修改和删除,所以我们用 find 来查看一下是否这个存储过程已经被创建上了。 > db.system.js.find() 调用一下这个存储过程: db.eval_r('addNumbers(3, 4.2)');

db.eval_r()是一个比较奇怪的东西,我们可以将存储过程的逻辑直接在里面并同时调用,而无需事先声明存储过程的逻辑。

db.eval_r( function() { return 3+3; }

转载于:https://www.cnblogs.com/HuiLove/p/3986032.html

mongodb查询find(相关推荐

  1. mongodb不等于某个值_MongoDb进阶实践之四 MongoDB查询命令详述

    一.引言 上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建.使用和删除数据库,文档的操作也涉及到了文档的创建.删除.更新和查询,当然也包括集合的创建.重命名和删除.有了这些基 ...

  2. MongoDB查询(上)

    MongoDB查询(上) 1.find MongoDB使用find来进行查询.查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.find的第一个参数 决定了要返回哪些文档.其形式也是 ...

  3. mongodb 查询效率_2020年9个好用的MongoDB 图形化界面工具

    市场上有许多MongoDB管理工具.这些工具可以提高MongoDB开发和管理的效率.下面我们就列举一些2020年好用的mongo管理工具. 1)NoSQLBooster 用于MongoDB的NoSQL ...

  4. Mongodb查询语句与Sql语句对比

    左边是mongodb查询语句,右边是sql语句.对照着用,挺方便. db.users.find() select * from users db.users.find({"age" ...

  5. Mongodb查询分析器解析

    Mongodb查询分析器 动态相关项目中涉及到数据量大和吞吐量的接口,例如关注页面动态,附近动态,这部分数据都是存储在mongodb中,在线上数据中分类两个mongodb集合存储 其中关注动态基于扩散 ...

  6. MongoDB查询实现 笛卡尔积,Union All 和Union 功能

    转载自   MongoDB查询实现 笛卡尔积,Union All 和Union 功能 此篇文章及以后的文章大部分都是从聚合管道(aggregation pipeline)的一些语法为基础讲解的,如果不 ...

  7. mongodb查询内嵌文档

    mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{&qu ...

  8. mongodb查询分页优化

    mongodb查询分页优化 转自:https://blog.csdn.net/chunqiuwei/article/details/11669885 项目中需要用mongodb来进行数据测存储和查询, ...

  9. mongodb 查询内嵌文档

    原文:http://www.cnblogs.com/silentjesse/p/3598399.html mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XX ...

  10. 跨mysql和mongodb查询工具_MySQL与MongoDB查询互转

    Mysql与MongoDB查询互转 mongo查询严格要求数据格式! 1.只想查出某些数据,不想全部数据都查出来 mysql:select name from user; mongo: db.user ...

最新文章

  1. 758.6G每秒:阿里云成功防御国内最大规模Memcached DDoS反射攻击
  2. paxos整合mysql_微信开源PhxSQL:高可用、强一致的MySQL集群(转载)
  3. 财务大数据比赛有python吗-如何在一个月之内掌握python数据分析,参加大数据比赛?...
  4. Windows Git客户端搭建
  5. 计算机等级考试试题在线测试,计算机等级考试上机练习题.pdf
  6. 好看的粉色树洞表白墙网站源码
  7. APP Profiler
  8. jacket for matlab,打印本页 - 在联想系统上使用Jacket For Matlab
  9. angular --开发环境搭建及项目创建
  10. python 传奇服务端_传奇游戏服务器源码学习
  11. Django传递数据给JS
  12. iOS 一种很方便的构造TarBar
  13. python thread start_Python中Thread类的start和run方法的区别
  14. 3dmax贴图材料丢失如何恢复
  15. python-Pandas库
  16. HTML引用另一个js文件的方法,在另一个js文件中调用一个javascript函数
  17. GAN的一些经典网络的基本思想
  18. c语言.jpg图片转成数组_电脑使用图片转换器打开heic图片方法
  19. jdk8中新增的日期处理类LocalDate,LocalTime,LocalDateTime,ZoneId,ZonedDateTime详解
  20. 数据监控难点之实时监测

热门文章

  1. c语言计算总分和平均分float,用C语言编程平均分数
  2. DNS服务器的基本工作
  3. 远程连接hive报错
  4. flink 入门及安装
  5. Prometheus入门简介
  6. sqoop导入与导出总结
  7. jTip定制实现博客日历
  8. CentOS安装及注意事项
  9. ReactNative入门 —— 动画篇(下)
  10. Android程序开发:简单电话拨号器