语法:
语法:
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
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我