Mongodb文档查询
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
比较操作:
|
操作 |
格式 |
|
等于 |
{<key>:<value>} |
|
小于 |
{<key>:{$lt:<value>}} |
|
小于或等于 |
{<key>:{$lte:<value>}} |
|
大于 |
{<key>:{$gt:<value>}} |
|
大于或等于 |
{<key>:{$gte:<value>}} |
|
不等于 |
{<key>:{$ne:<value>}} |
MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。
语法格式如下:
>db.col.find({key1:value1, key2:value2})
MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
- > db.person.find()
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }
- { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- > db.person.find(age:{$gt:5})
- 2017-06-01T21:12:33.114+0800 E QUERY??? SyntaxError: Unexpected token :
- > db.person.find({age:{$gt:5}})
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }
- { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
- > db.person.find({age:2,name:'zzj'})
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- > db.person.find({$or:[{age:2},{name:'xhj'}]})
- { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
MongoDB $type 操作符
描述
在本章节中,我们将继续讨论MongoDB中条件操作符 $type。
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB 中可以使用的类型如下表所示:
|
类型 |
数字 |
|
Double |
1 |
|
String |
2 |
|
Object |
3 |
|
Array |
4 |
|
Binary data |
5 |
|
Undefined |
6 |
|
Object id |
7 |
|
Boolean |
8 |
|
Date |
9 |
|
Null |
10 |
|
Regular Expression |
11 |
|
JavaScript |
13 |
|
Symbol |
14 |
|
JavaScript (with scope) |
15 |
|
32-bit integer |
16 |
|
Timestamp |
17 |
|
64-bit integer |
18 |
|
Min key |
255 |
|
Max key |
127 |
- > db.person.insert({name:'my second child',age:'i do not know'})
- WriteResult({ "nInserted" : 1 })
- > db.person.find()
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30 }
- { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 28 }
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
- > db.person.find({age:{$type:2}})
- { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
MongoDB Limit() 方法
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法
limit()方法基本语法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)
MongoDB Skip() 方法
我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
语法
skip() 方法脚本语法格式如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
实例
以上实例只会显示第二条文档数据
>db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
{ "title" : "Java 教程" }
>
MongoDB sort()方法
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
语法
sort()方法基本语法如下所示:
>db.COLLECTION_NAME.find().sort({KEY:1})
MongoDB findOne()方法
与find不一样的是,只查询出一条数据就停止查询了。
$all匹配所有
- > db.data.save({x:[1,2]})
- WriteResult({ "nInserted" : 1 })
- > db.data.save({x:[1,2,3]})
- WriteResult({ "nInserted" : 1 })
- > db.data.save({x:[2,3]})
- WriteResult({ "nInserted" : 1 })
- > db.data.find();
- { "_id" : ObjectId("593177646a6bb0f03293efe1"), "x" : 0 }
- { "_id" : ObjectId("593177646a6bb0f03293efe2"), "x" : 1 }
- { "_id" : ObjectId("593177646a6bb0f03293efe3"), "x" : 2 }
- { "_id" : ObjectId("593177646a6bb0f03293efe4"), "x" : 3 }
- { "_id" : ObjectId("593177646a6bb0f03293efe5"), "x" : 4 }
- { "_id" : ObjectId("593177646a6bb0f03293efe6"), "x" : 5 }
- { "_id" : ObjectId("593177646a6bb0f03293efe7"), "x" : 6 }
- { "_id" : ObjectId("593177646a6bb0f03293efe8"), "x" : 7 }
- { "_id" : ObjectId("593177646a6bb0f03293efe9"), "x" : 8 }
- { "_id" : ObjectId("593177646a6bb0f03293efea"), "x" : 9 }
- { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
- { "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }
- { "_id" : ObjectId("59317e786a6bb0f03293efed"), "x" : [ 2, 3 ] }
- > db.data.find({x:[1,2]});
- { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
- > db.data.find({x:{$all:[1,2]}});
- { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
- { "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }
$exists 某一列是否有存在
与是否为空不一样 如果某一列存在的值是null 那么他是存在但是为空的。
- > db.data.save({x:1,y:2});
- WriteResult({ "nInserted" : 1 })
- > db.data.find({y:{$exists:ture}})
- 2017-06-02T23:07:01.390+0800 E QUERY ReferenceError: ture is not defined
- at (shell):1:26
- > db.data.find({y:{$exists:true}})
- { "_id" : ObjectId("59317efe6a6bb0f03293efee"), "x" : 1, "y" : 2 }
- > db.data.save({x:1,y:null});
- WriteResult({ "nInserted" : 1 })
- > db.data.find({y:{$exists:true}})
- { "_id" : ObjectId("59317efe6a6bb0f03293efee"), "x" : 1, "y" : 2 }
- { "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }
$in 和判断是否为空
查询是否为空会把不存在的也查询出来 所以有时候要结合$exists一起来查询
> db.data.find({y:null});
{ "_id" : ObjectId("593177646a6bb0f03293efe1"), "x" : 0 }
{ "_id" : ObjectId("593177646a6bb0f03293efe2"), "x" : 1 }
{ "_id" : ObjectId("593177646a6bb0f03293efe3"), "x" : 2 }
{ "_id" : ObjectId("593177646a6bb0f03293efe4"), "x" : 3 }
{ "_id" : ObjectId("593177646a6bb0f03293efe5"), "x" : 4 }
{ "_id" : ObjectId("593177646a6bb0f03293efe6"), "x" : 5 }
{ "_id" : ObjectId("593177646a6bb0f03293efe7"), "x" : 6 }
{ "_id" : ObjectId("593177646a6bb0f03293efe8"), "x" : 7 }
{ "_id" : ObjectId("593177646a6bb0f03293efe9"), "x" : 8 }
{ "_id" : ObjectId("593177646a6bb0f03293efea"), "x" : 9 }
{ "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
{ "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("59317e786a6bb0f03293efed"), "x" : [ 2, 3 ] }
{ "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }
> db.data.find({y:{$in:null,$exists:true}});
Error: error: {
"$err" : "Can't canonicalize query: BadValue $in needs an array",
"code" : 17287
}
> db.data.find({y:{$in:[null],$exists:true}});
{ "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }
$ne:不等于
$nin:no in
$mod:取模运算
- > db.data.find({x:{$mod:[3,1]}});
- { "_id" : ObjectId("593177646a6bb0f03293efe2"), "x" : 1 }
- { "_id" : ObjectId("593177646a6bb0f03293efe5"), "x" : 4 }
- { "_id" : ObjectId("593177646a6bb0f03293efe8"), "x" : 7 }
- { "_id" : ObjectId("59317e6c6a6bb0f03293efeb"), "x" : [ 1, 2 ] }
- { "_id" : ObjectId("59317e736a6bb0f03293efec"), "x" : [ 1, 2, 3 ] }
- { "_id" : ObjectId("59317efe6a6bb0f03293efee"), "x" : 1, "y" : 2 }
- { "_id" : ObjectId("59317fd76a6bb0f03293efef"), "x" : 1, "y" : null }
$size 数组元素个数
$not 非
正则表达式支持:
- > db.person.find();
- { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 30, "address" : DBRef("address", ObjectId("59314b07e693aae7a5eb72ab")) }
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
- > db.person.find({name:/z/});
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
- > db.person.find({name:/^z/});
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
- > db.person.find({name:/^z..$/});
- { "_id" : ObjectId("59301270a92497992cdfac11"), "name" : "zzj", "age" : 2 }
- { "_id" : ObjectId("592ffd872108e8e79ea902b0"), "name" : "zjf", "age" : 30, "address" : { "province" : "河南省", "city" : "南阳市", "building" : "桐柏县" } }
- > db.person.find({name:{$not:/^z..$/}});
- { "_id" : ObjectId("593011c8a92497992cdfac10"), "name" : "xhj", "age" : 30, "address" : DBRef("address", ObjectId("59314b07e693aae7a5eb72ab")) }
- { "_id" : ObjectId("593015fda92497992cdfac12"), "name" : "my second child", "age" : "i do not know" }
- >
嵌入文档上的查询:
精确匹配:db.users.find( { favorites: { artist: "Picasso", food: "pizza" } } )
匹配嵌入文档的属性:db.users.find( { "favorites.artist": "Picasso" } )
数组查询
精确匹配:db.users.find( { badges: [ "blue", "black" ] } )
匹配包含一个数组元素:db.users.find( { badges: "black" } )
匹配指定元素:db.users.find( { "badges.0": "black" } )
内嵌文档数组:
匹配书第一个使用者的的年龄小于等于55的书:db.book.find( { 'users.0.age': { $lte: 55 } } )
匹配书使用者中包含至少一个的年龄小于等于55的书:db.book.find( { 'users.age': { $lte: 55 } } )
匹配书使用者中包含至少一个的年龄小于等于55并且为男性的书:db.book.find( { users: { $elemMatch: { age: { $lte: 55 }, sex: 'man' } } } )
匹配书使用者中包含至少一个的年龄小于等于55并且包含至少一个使用者为男性的书:db.book.find( { "users.age": { $lte: 55 }, "users.sex": 'man' } )
匹配书使用者中有3个的书:db.book.find( { 'users': { $size:3 } } ) 注意$size只支持等值查询
限制返回的列:
db.person.find(age:{$gt:5},{age:1,name:1})
返回_id,name,age列。
db.person.find(age:{$gt:5},{age:1,name:1,address:{$slice:10}})
返回_id,name,age列,address列(这里假设它为数组)只返回前10条。
db.person.find(age:{$gt:5},{age:1,name:1,address:{$slice:-10}})
返回_id,name,age列,address列(这里假设它为数组)只返回最后10条。
db.person.find(age:{$gt:5},{age:1,name:1,address:{$slice:[20,10]}})
返回_id,name,age列,address列(这里假设它为数组)只返回 从第20条开始之后的10条。
正则表达式查询:
db.person.find({'name':/zjf|xhj/i})
Mongodb文档查询的更多相关文章
- SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- MongoDB入门---文档查询操作之条件查询&and查询&or查询
经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- MongoDB文档(二)--查询
(一)查询文档 查询文档可以使用以下方法 # 以非结构化的方式显示所有的文档 db.<collectionName>.find(document) # 以结构化的方式显示所有文档 db.& ...
- MongoDB文档的基本操作
1. MongoDB的安装方法 (1)下载MongoDB 相应的版本: (2)设置数据文件和日志文件的存放目录: (3)启动MongoDB服务: (4)将MongoDB作为服务启动. 2. Mongo ...
- Elasticsearch增删改查 之 —— mget多文档查询
之前说过了针对单一文档的增删改查,基本也算是达到了一个基本数据库的功能.本篇主要描述的是多文档的查询,通过这个查询语法,可以根据多个文档的查询条件,返回多个文档集合. 更多内容可以参考我整理的ELK文 ...
- ES 父子文档查询
父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...
随机推荐
- charles安装&破解
走在测试的道路上,我们总归要学习抓包,仅仅是为了更好的定位bug出现的位置.抓包工具何其之多,但是我个人推荐的是charles,主要是因为windows和ios可以同时使用,这样就可以方便不少.不废话 ...
- 轻度折腾nuc8i5beh
最近入手了一台迷你电脑:Intel NUC--Next Unit of Computing,配了1根16GB内存条(2666)和两块固态(m.2+sata),搭载i5-8259U ,Intel Iri ...
- 再谈Java数据结构—分析底层实现与应用注意事项
在回顾js数据结构,写<再谈js对象数据结构底层实现原理-object array map set>系列的时候,在来整理下java的数据结构. java把内存分两种:一种是栈内存,另一种是 ...
- (转)使用 HTML5 WebSocket 构建实时 Web 应用
HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...
- 企业微信 PC端多开
企业微信,正常情况下一个PC端只能登一个账号.现在多个人共用一个外网机,需要在一个电脑上登录多个账号.解决办法如下: 下载process explorer.exe,使用管理员权限运行,找到WXWork ...
- 第三周课程总结&实验报告一
实验一 Java开发环境与简单Java程序 一.实验目的 熟悉JDK开发环境 熟练掌握结构化程序设计方法 二.实验内容 1.在此处输入标题打印输出所有的"水仙花数",所谓" ...
- Elasticsearch-字符串类型
ES-用于定义文档字段的核心类型 ES中一个字段可以是核心类型之一,如字符串.数值.日期.布尔型,也可以是一个从核心类型派生的复杂类型,如数组. 字符串类型 索引一类型为字符串的数据doc1: Fen ...
- hello1的web.xml解析
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" ...
- 【转】在C#中使用Json.Net进行序列化和反序列化及定制化
作者:Minotauros 原文地址:在C#中使用Json.Net进行序列化和反序列化及定制化 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态, ...
- 两两内积为0(牛客多校第七场)-- CDMA
题意: 构造一个n*n的矩阵,元素只能是-1或1,任意两行内积为0(两两相乘加起来和为0). 思路: #define IOS ios_base::sync_with_stdio(0); cin.tie ...