美文网首页我爱编程
MongoDB - 文档查询

MongoDB - 文档查询

作者: yuanzicheng | 来源:发表于2018-05-07 13:49 被阅读65次

1.基本查询

查询集合中所有文档

db.user.find()

使用游标遍历集合

# 使用hasNext() 和 next()
var cursor = db.user.find()
while(cursor.hasNext()){
var temp = cursor.next()
print(temp.name)
}
# 使用forEach()
var cursor = db.user.find()
cursor.forEach(function(temp){
print(temp.name)
})

2.条件查询

2.1 条件查询支持按照指定的字段值精准匹配
db.user.find({name:"tom"})
db.user.find({name:"tom",age:10})
2.2 条件查询还支持各种操作符来实现更多特定的匹配和筛选
  • $or(或)
# 查询年龄为10或11的用户
db.user.find({$or:[{age:10},{age:11}]})
  • $gt(大于)
db.user.find({age:{$gt:10}})
  • $gte(大于等于)
db.user.find({age:{$gte:10}})
  • $lt(小于)
db.user.find({age:{$lt:10}})
  • $lte(小于等于)
db.user.find({age:{$lte:10}})
  • $ne(不等于)
db.user.find({name:{$ne:"tom"}})
  • $type(类型匹配,支持double、string、object、array、bool、date、null、int、long、timestamp...)
# 查询name字段值为字符串的用户
db.user.find({name:{$type:"string"}})
  • $exists(字段是否存在)
db.user.find({age:{$exists:true}})
  • $mod(取模)
# 查询age取模等于0的文档
db.user.find({age:{$mod:[10,0]}})
  • $in(包含)
# 查询年龄字段值包含在[10,11]数组中的文档
db.user.find({age:{$in:[10,11]}})
  • $nin(包含)
# 查询年龄字段值不包含在[10,11]数组中的文档
db.user.find({age:{$nin:[10,11]}})
  • $not(取非,可与其它操作符结合使用)
db.user.find({age:{$not:{$in:[10,11]}}})

3.特定类型查询

3.1 null

null在MongoDB中表示字段不存在或者字段值为空

# 查询age字段不存在或age字段值为空的用户
db.user.find({"age":null})
# 查询age字段存在且值不为空的用户
db.user.find({"age":{$nin:[null]}})
3.2 正则表达式查询

MongoDB中的正则表达式语法与shell脚本中几乎一致,这里不一一赘述,如有需要自行拓展阅读。

# 查询name字段值以j开头k结尾的用户
db.user.find({"name":/^j.*k$/})
3.3 嵌套文档查询

MongDB中BSON格式的文档支持嵌套。

  • 插入一条嵌套文档
db.user.insert({"name":"rose","phone":{"home":"123456","mobile":"123456789"}})
  • 精确匹配查询
db.user.find({"name":"rose","phone":{"home":"123456","mobile":"123456789"}})
  • 按字段查询(嵌套字段之间以.连接)
db.user.find({"phone.home":"123456"})
3.4 数组查询

文档的某个字段值可以是数组,数组的查询支持多种方式。

  • 插入一条字段值包含数组的文档
db.user.insert({"name":"rose","role":[1,2,3]})
  • 查询数组中包含某个元素的文档
db.user.find({"role":1})
  • $all 查询完全包含指定数组的文档
db.user.find({"role":{$all:[1,2]}})
db.user.find({"role":{$all:[1,2,3]}})
  • $size 按数组长度查询
db.user.find({"role":{$size:3}})
  • $slice 限定返回数组的部分数据
# 只返回数组的前2个元素
db.user.find({},{"role":{$slice:2}})
# 只返回数组的后2个元素
db.user.find({},{"role":{$slice:-2}})
  • 精确匹配
db.user.find({"role":[1,2,3]})
  • 索引查询(数组都是有索引的,数组的索引基于元素在数组中的位置)
# 查询role数组中第1个元素值为1的文档
db.user.find({"role.0":1}),
  • $elemMatch 元素查询

数组值如果有多个字段(即嵌套文档),需要查询满足多个条件的文档时有两种方式

插入一条数组值为嵌套文档的记录

db.user.insert({"name":"rose","role":[{"roleNo":1,"roleName":"管理员"},{"roleNo":2,"roleName":"vip用户"}]})

按嵌套字段精确查询

db.user.find({"role.roleNo":1,"role.roleName":"管理员"})

使用$elemMatch查询

db.user.find({"role":{$elemMatch:{"roleNo":1,"roleName":"管理员"}}})

4.高级查询

如果查询条件特别复杂,还可以使用$where及JavaScript进行查询。

示例:遍历user文档,如果age>11,给该文档添加一个tag字段

  • 使用JavaScript
db.user.find().forEach(function(item) {
    if (item.age > 11) {
        item.tag = "11岁以上"
    }
    db.user.save(item)
})
  • JavaScript与$where结合使用
db.user.find({$where:"this.age>11")
db.user.find("this.age>11")

还可以在find()中传入JavaScript函数

f = function(){return this.age > 11}
db.user.find(f)

5.查询辅助

还可以在find()之后,对数据的查询进行额外的限定。

  • limit 条数限定
# 查询前2条
db.user.find().limit(2)
  • skip 起始位置限定
# 跳过前2条,从第3条开始查询
db.user.find().skip(2)
# 跳过前2条,从第3条开始查询2条记录(即第3、4条)
db.user.find().skip(2).limit(2)
  • sort 排序
# 按年龄升序
db.user.find().sort({age:1})
# 按年龄降序
db.user.find().sort({age:-1})

以上限定条件可以结合使用。

相关文章

  • spring date mongo mongotemplate使

    Spring数据MongoDB三:基本文档查询(查询,基本查询)(一) MongoDB高级查询[聚合] sprin...

  • mongo二2018-06-29

    MongoDB基础语法——查询数据 基本查询 find([{文档条件}]):全集合查询 findOne([{文档条...

  • MongoDB - 文档查询

    1.基本查询 查询集合中所有文档 使用游标遍历集合 2.条件查询 2.1 条件查询支持按照指定的字段值精准匹配 2...

  • MongoDB 查询文档

    语法MongoDB 查询数据的语法格式如下: 该语句是查询collection中全部数据,效果和关系型数据库的语句...

  • MongoDB查询文档

    MongoDB 查询文档使用 find() 方法。find() 方法以非结构化的方式来显示所有文档。 db.col...

  • MongoDB查询文档

    1.查询所有文档 语法:db.集合名字.find() 2.根据条件查找匹配的文档 语法:db.集合名字.find(...

  • MongoDB实现地理位置查询

    Mongodb地理位置查询文档MongoDB支持地理位置索引,可以直接用于位置距离计算和查询。查询结果默认将会由近...

  • PHP MongoDB 查询文档 --- 2022-04-02

    本章介绍PHP MongoDB文档查询的用法。 前置教程 MongoDB教程[https://www.tizi36...

  • MongoDB 文档查询 I

    文档查询 语法: pretty() 方法可将结果格式化为可读模式 query 条件 字段比较 AND 条件 格式:...

  • MongoDB查询内嵌文档

    一、概述 二、查询整个文档 例如:有如下文档 参考示例:查询date 为2016-08-05 user_id 为U...

网友评论

    本文标题:MongoDB - 文档查询

    本文链接:https://www.haomeiwen.com/subject/aseyzxtx.html