java使用mongDB的根据数字大小比较查询 和 命令行基础查询

java使用mongDB的根据数字大小比较查询 和 命令行基础查询java使用mongDB的根据数字大小比较查询 和 命令行基础查询

大家好,又见面了,我是你们的朋友全栈君。


package com.infomorrow.webroot;

import java.util.List;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class test_mongodb {
    public static void  main(String args[]) throws Exception {
        MongoClient        mongoClient = new MongoClient( "127.0.0.1" , 27017 );//建立连接
        DB get_db_credit = mongoClient.getDB("credit_2");//数据库名
        DBCollection collection = get_db_credit.getCollection("report");//集合名,对应mysql中的表名
        BasicDBObject filter_dbobject = new BasicDBObject();

        //建立查询条件,如果还有其他条件,类似的写即可
        // 如:version=3,filter_dbobject.put("version", 3),mongod区分String 和 Integer类型,所以要小心"3"!=3
        filter_dbobject.put("user_id", "10065716153075");

        //下面执行查询,设置limit,只要10条数据,排序(类mysql orderby) 再建一个BasicDBObject即可,-1表示倒序
        DBCursor cursor = collection.find(filter_dbobject).limit(10).sort(new BasicDBObject("create_time",-1));

       //把结果集输出成list类型
        List<DBObject> list = cursor.toArray();
        System.out.println(list.size());//list的长度
        System.err.println(cursor.count());//计算结果的数量,类似于(mysql count()函数),不受limit的影响


        //遍历结果集
        while(cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
}

关于查询:如果想要查 “a=30或a=50”这样的条件怎么办?

可以使用$in进行查询:

      public void testIn(){
        //a=30或者a=50
        DBObject queryCondition = new BasicDBObject();        

        BasicDBList values = new BasicDBList();
        values.add(30);
        values.add(50);
        queryCondition.put("a", new BasicDBObject("$in", values));

        DBCursor dbCursor = coll.find(queryCondition);

    }

2.关于查询:如果想要查 “a>30或a<10”这样的条件怎么办?

可以使用$or进行查询:

 public void testOrSingleField(){
        DBObject queryCondition = new BasicDBObject();        
        //查询a<10 OR a>30
                  BasicDBList values = new BasicDBList();
        values.add(new BasicDBObject("a", new BasicDBObject("$gt", 30)));
        values.add(new BasicDBObject("a", new BasicDBObject("$lt", 10)));
        queryCondition.put("$or", values);

        DBCursor dbCursor = coll.find(queryCondition);

    }

那么,如果想要查 “a>30或b<10”这样的条件怎么办?

只需要将上面代码改为如下,即可:

 values.add(new BasicDBObject("b", new BasicDBObject("$lt", 10)));

3.如果是多值and查询只用new BasicDBobject(),然后再put即可,如下所示:

BasicDBObject basic=new BasicDBObject();
basic.put("name","amosli");
basic.put("hobby","code");
....
collection.find(basic).toArray();//将值转为list

4查询非操作

查询level为INFO,但status不为"已完成"的所结果数
  //not equal 非操作
        BasicDBObject basicDBObject = new BasicDBObject("level","INFO");
        System.out.println(collection.count(basicDBObject.append("status", new BasicDBObject("$ne",  "已完成"))));

5.使用skip跳过少量的数据是很好的选择,但是如果跳过大量的数据的时候,skip方法就会执行的很慢。所以我们要尽量的避免使用skip跳过大量的数据

public List<User> pageList(int page,int pageSize){
        DB myMongo = MongoManager.getDB("myMongo");
        DBCollection userCollection = myMongo.getCollection("user");

        DBCursor limit = userCollection.find().skip((page - 1) * 10).sort(new BasicDBObject()).limit(pageSize);     List<User> userList = new ArrayList<User>();
        while (limit.hasNext()) {
            User user = new User();
            user.parse(limit.next());
            userList.add(user);
        }
        return userList;
    }

转自:https://blog.csdn.net/qq_28546451/article/details/82659376

 


左边是mongodb查询语句,右边是sql语句。对照着用,挺方便。  
db.users.find() select * from users  
db.users.find({"age" : 27}) select * from users where age = 27  
db.users.find({"username" : "joe", "age" : 27}) select * from users where "username" = "joe" and age = 27  
db.users.find({}, {"username" : 1, "email" : 1}) select username, email from users  
db.users.find({}, {"username" : 1, "_id" : 0}) // no case  // 即时加上了列筛选,_id也会返回;必须显式的阻止_id返回  
db.users.find({"age" : {"$gte" : 18, "$lte" : 30}}) select * from users where age >=18 and age <= 30 // $lt(<) $lte(<=) $gt(>) $gte(>=)  
db.users.find({"username" : {"$ne" : "joe"}}) select * from users where username <> "joe"  
db.users.find({"ticket_no" : {"$in" : [725, 542, 390]}}) select * from users where ticket_no in (725, 542, 390)  
db.users.find({"ticket_no" : {"$nin" : [725, 542, 390]}}) select * from users where ticket_no not in (725, 542, 390)  
db.users.find({"$or" : [{"ticket_no" : 725}, {"winner" : true}]}) select * form users where ticket_no = 725 or winner = true  
db.users.find({"id_num" : {"$mod" : [5, 1]}}) select * from users where (id_num mod 5) = 1  
db.users.find({"$not": {"age" : 27}}) select * from users where not (age = 27)  
db.users.find({"username" : {"$in" : [null], "$exists" : true}}) select * from users where username is null // 如果直接通过find({"username" : null})进行查询,那么连带"没有username"的纪录一并筛选出来  
db.users.find({"name" : /joey?/i}) // 正则查询,value是符合PCRE的表达式  
db.food.find({fruit : {$all : ["apple", "banana"]}}) // 对数组的查询, 字段fruit中,既包含"apple",又包含"banana"的纪录  
db.food.find({"fruit.2" : "peach"}) // 对数组的查询, 字段fruit中,第3个(从0开始)元素是peach的纪录  
db.food.find({"fruit" : {"$size" : 3}}) // 对数组的查询, 查询数组元素个数是3的记录,$size前面无法和其他的操作符复合使用  
db.users.findOne(criteria, {"comments" : {"$slice" : 10}}) // 对数组的查询,只返回数组comments中的前十条,还可以{"$slice" : -10}, {"$slice" : [23, 10]}; 分别返回最后10条,和中间10条  
db.people.find({"name.first" : "Joe", "name.last" : "Schmoe"})  // 嵌套查询  
db.blog.find({"comments" : {"$elemMatch" : {"author" : "joe", "score" : {"$gte" : 5}}}}) // 嵌套查询,仅当嵌套的元素是数组时使用,  
db.foo.find({"$where" : "this.x + this.y == 10"}) // 复杂的查询,$where当然是非常方便的,但效率低下。对于复杂查询,考虑的顺序应当是 正则 -> MapReduce -> $where  
db.foo.find({"$where" : "function() { return this.x + this.y == 10; }"}) // $where可以支持javascript函数作为查询条件  
db.foo.find().sort({"x" : 1}).limit(1).skip(10); // 返回第(10, 11]条,按"x"进行排序; 三个limit的顺序是任意的,应该尽量避免skip中使用large-number 

转自:https://blog.csdn.net/Sunyc1990/article/details/78429372

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105968.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python数据清洗补齐_我的世界fill填充上半砖

    python数据清洗补齐_我的世界fill填充上半砖缺失数据比较多的情况下,可以直接滤除,缺失数据比较少时,对数据进行填充就很有必要了。数据填充函数fillna()默认参数如下:fillna(self,value=None,method=None,axis=None,inplace=False,limit=None,downcast=None,**kwargs)importnumpyasnpfromnumpy…

    2022年8月12日
    5
  • 【oracle】varchar和varchar2区别「建议收藏」

    【oracle】varchar和varchar2区别「建议收藏」1.varchar是标准sql里面的。varchar2是oracle提供的独有的数据类型。2.varchar对于汉字占两个字节,对于英文是一个字节,占的内存小,varchar2都是占两个字节。3.varchar对空串不处理,varchar2将空串当做null来处理。4.varchar存放固定长度的字符串,最大长度是2000,varchar2是存放可变长度的字符串,最大长度是4000….

    2022年6月15日
    33
  • [ IDEA ] 安装activate-power-mode

    [ IDEA ] 安装activate-power-mode一款很酷炫的代码编辑特效插件先来看看效果和平常的插件方式一样:1、官网插件社区https://plugins.jetbrains.com/plugin/8251-power-mode-ii安装和配置都可以在File>Setting中完成2、githubhttps://github.com/codeinthedark/aw

    2022年7月15日
    37
  • web前端 html+css+javascript网页设计实例 企业网站制作

    web前端 html+css+javascript网页设计实例 企业网站制作(案例源码链接在文章末尾,仅供学习参考)一、在浏览器中的运行结果:二、部分代码1.HTML:<!DOCTYPEhtml><html><headlang=”en”><metacharset=”UTF-8″><title>启乐官网</title><linkrel=”stylesheet”href=”style.css”/><scriptsrc=”myjs.j

    2022年6月16日
    34
  • python读取log文件_python分析log日志

    python读取log文件_python分析log日志一、原理QXDM抓取log为isf格式,需要用QCAT打开进行分析,如果需要自动分析QXDM抓取的log,一个可行的方法为调用QCAT的COM接口打开isf文件并进行分析。QCAT6.X支持基于COM的接口调用,允许用户通过Perl、VBScript、JavaScript、Python等脚本语言调用应用。具体调用方法在QCAT安装后的《QCATUserGuide》用户手册中,第六章S…

    2022年10月2日
    3
  • Jenkins(3)拉取git仓库代码,执行python自动化脚本[通俗易懂]

    Jenkins(3)拉取git仓库代码,执行python自动化脚本[通俗易懂]前言python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了新建项目打开Jenkins新建一个自由风格的项目源码管理Repository

    2022年7月29日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号