• MongoDB查询


    find查询

    find的第一个参数是返回哪些文档,类是于sql里面的where语句

    如在集合user里面就是

    > db.user.find()

    其中默认参数为{},默认会查询全部的内容。当我们在查询文档中添加键值,就表示了查询的条件,如:

    > db.user.find()
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    { "_id" : ObjectId("51ba745f5fdf5d2d7426eb35"), "abc" : 123, "age" : 1 }
    > db.user.find({age:2});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    >

    查询多个键值时

    > db.user.find({age:2});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    > db.user.find({age:2,username:'wangwu'});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    > db.user.find({age:2,username:'wangwu',password:'abc'});
    >

    指定返回键

    有时候我们并不需要所有满足条件的都返回,可以用find的第二个参数来指定想要的键,这样即会节约传输的数据量,也会节约客户端的解析时间。

    当我们需要的时候就将指定键的值设置为1,不需要就设置为0,其中_id为必须返回值

    > db.user.find({age:2},{username:0});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a" }
    > db.user.find({age:2},{username:1});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "username" : "wangwu" }

    查询条件

    操作符 表示
    $lt <
    $lte <=
    $gt >
    $gte >=

    例如查询年龄在(1,10)之间的文档

    > db.user.find({age:{$lt:10,$gt:1}});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }

    or查询

    MongoDB中的or查询有两种方式

    $in可以用来查询一个键的多个值,和sql里面的in类似

    > db.user.find({age:{$in:[1,2]}});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    { "_id" : ObjectId("51ba745f5fdf5d2d7426eb35"), "abc" : 123, "age" : 1 }
    >

    $or用来完成多个键的任意给定值,和sql的or类似,

    > db.user.find({$or:[{age:2},{abc:123}]})
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    { "_id" : ObjectId("51ba745f5fdf5d2d7426eb35"), "abc" : 123, "age" : 1 }
    >

    or里面还可以包含其他条件,如将age的条件2修改成前面的$in:[1,2]。

    特定类型查询

    null

    匹配null和不存在类型,如果要只匹配null需要用$exists:true来来判断

    正则表达式

    正则表达式能够灵活的匹配字符串

    ps.有点类是于sql里面的like,但是比like要灵活的多

    语法以/开头/结尾,和javascript中的正则表达式相同

    如查询用户名中包含w的用户

    > db.user.find({username:/w/})
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }

    查询数组

    直接查询

    > db.user.find({arr:2});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }

    匹配多个 $all

    > db.user.find({arr:{$all:[2,3]}});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    >

    查询指定长度的数组 $size

    > db.user.find({arr:{$size:3}});
    > db.user.find({arr:{$size:4}});
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    >

    返回指定的数据条数 $slice

    > db.user.findOne({age:2},{arr:{$slice:2}});
    {
            "_id" : ObjectId("51b28f74b73ec06e42c91598"),
            "age" : 2,
            "arr" : [
                    2,
                    3
            ],
            "password" : "a",
            "username" : "wangwu"
    }
    >

    $where查询

    $where可以执行任意javascript语句作为查询的一部分

    > db.user.find({$where:function(){if(this.age==2)return true ; return false;}});
    
    { "_id" : ObjectId("51b28f74b73ec06e42c91598"), "age" : 2, "arr" : [  2,  3,  3,
      4 ], "password" : "a", "username" : "wangwu" }
    >

    游标

    数据库使用游标来返回find的执行结果

    当调用find的时候,shell并不立即查询数据库,而是等待真正开始获取结构的时候才发送查询请求。

    limit(n) 限制返回结构数量

    skip(n) 忽略指定数量

    sort ({x1:n1,x2:n2……}) 排序n为1升序 –1 降序

  • 相关阅读:
    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的……
    VS 扩展管理器,方便的插件
    VUE CLI中使用Jquery无法获取到dom节点
    Navicat 连接SQL Server LocalDB的方法
    修改cas登陆页面服务器端
    easyui tree 拖拽功能并将数据返回后台保存至数据库
    RedHat下GCC及G++的安装
    Java中的字符串池
    Java内存泄露
    TSQL字符转义
  • 原文地址:https://www.cnblogs.com/ac1985482/p/3135793.html
Copyright © 2020-2023  润新知