mongodb查询(学习笔记二)

查询

db.collection.find(query****, ****projection)
query: 查询条件
projection: 指定需要返回的字段

db.foo.find() //返回集合foo中的所有文档
db.foo.find({name: "Tom"}) //返回匹配到的所有文档
db.foo.find({name: "Tom", age: 22}) //条件1和条件2都要符合

//筛选需要返回的键(_id默认返回)
db.foo.find({}, {name: 1}) //返回的文档中包含_id字段和name字段
db.foo.find({}, {_id: 0, name: 1}) //不返回_id字段,放回name字段

查询条件

1. 比较操作符

$lt === "<" 小于
$let === "<=" 小于等于
$gt === ">" 大于
$gte === ">=" 大于等于

db.foo.find({age: {$lt: 25, $gt: 10}}) //找到age大于10小于25的文档

$eq 等于
$ne 不等于

db.foo.find({name: {$eq: "Tom"}})
db.foo.find({name: {$ne: "Tom"}})

$in 包含
$nin 不包含

db.foo.find({num: {$in: [3, 4, 5]}}) //匹配其中一个就行
db.foo.find({num: {$nin: [1, 3]}})

2. 逻辑操作符
$and
$or
$nor
$not 取反

db.foo.find({$and: [{name: "Tom"}, {age: 11}]})
db.foo.find({$or: [{name: "Tom"}, {name: "Andy"}]})
db.foo.find({$nor: [{name: "Tom"}, {name: "Andy"}]})
db.foo.find({name: {$not: {$in: ["Tom", "Andy"]}}})

3. 元素操作符
$exists 字段是否存在
$type 选择字段值为指定BSON数据类型编号的文档

mongodb查询(学习笔记二)_第1张图片

mongodb查询(学习笔记二)_第2张图片
db.foo.find({name: {$exists: true}})
db.foo.find({name: {$type: 2}})

4. $where查询
在查询中使用任意的javascript,可以使用this或obj来引用当前操作的文档,返回true时才会返回当前的文档。

db.foo.find({$where: "this.name === 'Tom'"})

数组查询

$all 查询参数数组中包含指定元素的文档

db.foo.find({hobby: {$all: ["swimming", "shopping"]}})
db.foo.find({"hobby.1": "shopping"}) // 查询数组特定位置的元素,需使用key.index指定下标

$size 查询指定长度的数组

db.foo.find({hobby: {$size: 3}})
db.foo.find({$and: [{hobby: {$size: 3}}, {"hobby.0": "swimming"}]}) 

$slice 返回某个键匹配的数组元素的一个子集

db.foo.find({name: "Tom"}, {hobby: {$slice: 3}})
db.foo.find({name: "Tom"}, {hobby: {$slice: [2, 3]}}) //指定偏移量以及希望返回的元素数量

$ 返回第一个匹配的数组元素

db.foo.find({hobby: "running"}, {"hobby.$: 1"})

$elemMatch 多条件查询 按条件返回数组元素的子集

db.foo.find({x: {$elemMatch: {$gt: 10, $lt: 30}}})

查询内嵌文档

  1. 查询整个内嵌文档。
    如果要查询一个字文档,那么字文档必须精确匹配。内嵌文档键值对的数量以及顺序相同才会匹配。
db.foo.find({contact: {email: "[email protected]", phone: 13756456726}})
  1. 查询文档的某个字段。
    使用.操作法,只针对内嵌文档的特定值进行查询。
db.foo.find({"contact.email": "[email protected]"})

你可能感兴趣的:(mongodb查询(学习笔记二))