语法:
语法: db.集合名.find() // 查询条件默认为 {} 返回该集合所有文档,当然还有第二个{}参数,用来指定返回哪些字段 注意:find查询始终会返回主键,查询的条件参数内,键的值必须是常量 示例: db.user.find({age:18,sex:1}) db.user.find(age:18,sex:1},{name:1}) //查询年龄为18,性别为1的人的年龄,如果name字段的值为0,表示返回结果不显示该字段
在mysql中,常用的条件是<,>,>=等等,在mongo中采用如下方式:
语法: db.collection.find({field: {$gt:value}}) //大于:field > vlue db.collection.find({field: {$lt:value}}) //小于:field < vlue db.collection.find({field: {$gte:value}}) //大于等于:field >= vlue db.collection.find({field: {$lte:value}}) //大于等于:field <= vlue db.collection.find({field: {$ne:value}}) //不等于 示例: db.user.find(age:{$gt:18, $lt:50})
$all 查找满足条件的所有数据:
db.user.find(hob: {$all:["网球","WOW"]}) //用户的兴趣键hob,值是个数组,查找兴趣包含 网球 WOW 的人 注意这里与数组的顺序无关 注意:如果是对一个元素操作,下列两种写法结果一致 db.user.find(hob: {$all:["网球"]}) db.user.find(hob: "网球")
$exists 判断字段是否存在。
db.user.find({name:{$exists:true}}) //查询name字段是否在user集合中, false表示查询不存在该字段的文档
null值处理
db.user.find({age:null}) //查询age值为null的文档,但是会查询到没有age字段的文档 db.user.find({age:{$in:[null], $exists:true}}) //查询既age字段,age字段值又为null的文档
$mod 取模运算
db.user.find({age: { $mod: [10, 0]}}) //查询age字段值,取模10等于0的文档
$in 包含
$nin 不包含,用法同 $in
与sql中的in用法一致: db.collection.find(field: {$in: [n1,n2,n3]})
$size 查询指定长度的数组
db.user.find(hob: {$size: 4}) //查询有4个兴趣的人
正则支持:mongo查询支持正则筛选
db.user.find(name: /s/) //查询名称中含有s的人,在sql中使用的是 %s% 其他条件: s/: 以s开头
条件查询的多种方式:
查询年龄大约18岁的人 方式一 db.user.find({age: {$gt: 18}}) 方式二 db.user.find({$where: "this.age>18"}) 方式三 db.user.find({"this.age>18"}) 方式四 f = function(){return this.age>18} db.user.find(f)
注意:$where可以传入各种JS表达式,但是这种查询方式需要将BSON文档转换为JS对象,速度相对较慢,不推荐使用
count()获取查询结果的数目:
db.collection.find().count() 注意:返回一些条件查询后的数目,需要传入参数true或者非0 db.user.find().skip(2).count(1)
limit()用于限制返回记录数,skip()用于限制返回记录的起点
db.user.find().limit(3) //只返回前三条数据 db.user.find().skip(2) //从第二条记录开始返回
sort()用于排序:
db.user.find().sort({age:1}) //按年龄升序排列, -1表示降序排列,当然也可以指定多个键条件
limit,skip,sort通常用于分页查询。
第一页:db.collection.find().limit(N) 第二页:db.collection.find().skip((2-1)*N).limit(N) 第三页:db.collection.find().skip((3-1)*N).limit(N) ... 第P页:db.collection.find().skip((P-1)*N).limit(N)
distinct用于排除选项。
语法: db.runCommand({distinct: collection, key: keyname}) 示例: db.runCommand({distinct: "user", key: "name"})
游标在mongoshell中的使用:
var cursor = db.user.find() while(cursor.hasNext()){ printjson(cursor.next()) }
当然游标也有一个迭代函数,允许我们自定义回调函数来逐个处理每个单元:
cursor.forEach(回调函数)
一般情况下,文档内部内嵌的文档是直接以{}形式出现的,但是在更新时,很容易出现多处需要更新的情况,这时反范式的。而如果通过id来手动关联另一个集合,修改方便了,但是读取又变成了2次。
Mongo推出了DBRef来解决这个问题,类似mysql中的外键。
# 语法 {$ref: 集合名, $id: 引用id, $db: 可选参数-数据库名} # 示例 部门集合department中的一个文档: {"id": 1, name: "技术部", index: 10} 员工集合中的一个文档张三,属于上述部门 { "name":"张三", "age": 22, "department": {"$id": 1, $ref": "department"} }
此时查询员工集合,就可以直接查询到该员工所属部门的文档内容。
本文地址:https://www.stayed.cn/item/384
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我