Mongoval 语法查询(一)

对于mongoDB 客户mongoVal对经常需要些json格式来进行查询。

简单介绍几种常见的查询

(1)or查询:

在JSON中"$or"表示后面的数组里面的元素是存在or关系,而不是表示和前面元素存在or的关系。

{"$or":[{"encodeId":444},{"encodeId":446},{"encodeId":447}]}

这就表示把encodeId=444,446,447的元素查询出来

(2)and查询
and 和or相反也是表示后面的数组里面的元素是存在and关系,而不是表示和前面元素存在and的关系。

默认不知明表示是and关系。

{"$and":[{"encodeId":444},{"encodeId":446},{"encodeId":447}]}

{"status":30,"encodeId":{"$lte":500}}

  (3)大于("$gt")

  {"encodeId":{"$gt":500}}

  (4)小于(“$lt”)

   {"encodeId":{"$lt":500}}

  (5)大于等于(“$gte”)

  {"encodeId":{"$gte":500}}

  (6)小于等于(“$lte”)

   {"encodeId":{"$lte":500}}

 (7) 有的时候需要大于个数小一个数

   {"encodeId":{"$lte":500,"$gt":480}}

 (8)where 查询

{"$where":"this.completeTime>0&&this.completeTime<=this.updateTime"}

(9)模糊查询

{fileName:{"$regex":"wmv|mp4"}}

 (10) 不等于("$ne")

(11)in操作

{ "uploadId" : { "$in" : [ "135305" , 231405" , "231419" , "228812"]}}

案例查询语句

{
    "$or": [
        {
            "videoCDNStatus": {
                "$gt": -3,
                "$lte": 0
            },
            "mmsStatus": 0,
            "status": 30
        },
        {
            "videoCDNStatus": 1,
            "status": 30
        },
        {
            "videoCDNStatus": 10,
            "$or": [
                {
                    "checksumStatus": 0
                },
                {
                    "checksumStatus": 1
                }
            ],
            "status": 30
        },
        {
            "videoCDNStatus": 10,
            "checksumStatus": 2,
            "status": 30
        },
        {
            "videoCDNStatus": 10,
            "checksumStatus": 10,
            "status": 30,
            "mmsStatus": 0
        }
    ]

}

在java中通过morphia 中query操作语句

query.or(
                query.and(query.criteria("videoCDNStatus").lessThanOrEq(0),query.criteria("videoCDNStatus").greaterThan(-3),query.criteria("mmsStatus").equal(0),query.criteria("status").equal(VideoEncode.STATUS_COMPLETE)),
                query.and(query.criteria("videoCDNStatus").equal(VideoEncode.CDN_STAUTS_ING),query.criteria("status").equal(VideoEncode.STATUS_COMPLETE)),
                query.and(query.criteria("videoCDNStatus").equal(VideoEncode.CDN_STAUTS_COMPLETE),query.or(query.criteria("checksumStatus").equal(0), query.criteria("checksumStatus").equal(1)),query.criteria("status").equal(VideoEncode.STATUS_COMPLETE)),
                query.and(query.criteria("videoCDNStatus").equal(VideoEncode.CDN_STAUTS_COMPLETE),query.criteria("checksumStatus").equal(2),query.criteria("status").equal(VideoEncode.STATUS_COMPLETE)),
                query.and(query.criteria("videoCDNStatus").equal(VideoEncode.CDN_STAUTS_COMPLETE),query.criteria("checksumStatus").equal(VideoEncode.CHECKSUM_STAUTS_COMPLETE),query.criteria("status").equal(VideoEncode.STATUS_COMPLETE),query.criteria("mmsStatus").equal(0))
                );

{ "mid" : 1 , "$or" : [ { "status" : 30 , "videoCDNStatus" : 10 , "checksumStatus" : 10} , { "$or" : [ { "status" : 70} , { "videoCDNStatus" : -1} , { "checksumStatus" : -10}]}]}

 Query<VideoEncode> query = createQuery();
        query.field("mid").equal(mid);
        query.or(
                query.and(query.criteria("status").equal(VideoEncode.STATUS_COMPLETE).criteria("videoCDNStatus").equal(VideoEncode.CDN_STAUTS_COMPLETE).criteria("checksumStatus").equal(VideoEncode.CDN_STAUTS_COMPLETE)),
                query.or(query.criteria("status").equal(VideoEncode.STATUS_FAIL),query.criteria("videoCDNStatus").equal(VideoEncode.CDN_STAUTS_FAIL),query.criteria("checksumStatus").equal(VideoEncode.CHECKSUM_STAUTS_FAIL))
        );
        return find(query).asList();


 db.video_encode.update( { "status" :10 }  , { "$set" : { "status" : 30} },false,true );

插入一个带有数组元素的文档
db.food.insert({"fruit": ["apple", "banana", "peach"]}) 
db.food.find() 
{ "_id" : ObjectId("4ea6a4ef0b12b1d429b4057f"), "fruit" : [ "apple", "banana", "peach" ] }


查询数组元素中包含某个值的文档
db.food.find({"fruit": "banana"}) 
{ "_id" : ObjectId("4ea6a4ef0b12b1d429b4057f"), "fruit" : [ "apple", "banana", "peach" ] }

db.food.find({"fruit": {"$all": ["banana"]}}) 
{ "_id" : ObjectId("4ea6a4ef0b12b1d429b4057f"), "fruit" : [ "apple", "banana", "peach" ] }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值