阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB基本操作命令

185次阅读
没有评论

共计 4804 个字符,预计需要花费 13 分钟才能阅读完成。

由于工作需要,笔者这两天使用了一下 MongoDB。真的很不习惯!但是确实好用,命令比 mysql 和 sqlserver 简单很多。在这里整理一些 MongoDB 的基本操作命令分享出来。

客户端的安装就不说了,笔者是 shell 通过服务器连接的 MongoDB 进行操作的,直接进入正题。

show dbs: 显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表)
show users:显示用户

use <db name>:切换当前数据库,这和 MS-SQL 里面的意思一样
db.help():显示数据库操作命令,里面有很多的命令
db.foo.help():显示集合操作命令,同样有很多的命令,foo 指的是当前数据库下,一个叫 foo 的集合,并非真正意义上的命令
db.foo.find():对于当前数据库中的 foo 集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find({ a : 1} ):对于当前数据库中的 foo 集合进行查找,条件是数据中有一个属性叫 a,且 a 的值为 1

MongoDB 没有创建数据库的命令,但有类似的命令。

如:如果你想创建一个“myTest”的数据库,先运行 use myTest 命令,之后就做一些操作(如:db.createCollection(‘user’)), 这样就可以创建一个名叫“myTest”的数据库。

 

由于笔者是测试,所以目前用不上增、删、改的。不过我记得在 Mon 里对应的命令应该是 insert、drop、update。这些只是针对表数据。针对数据库和数据表的没有接触就不说了。下面给大家整理的是 Mon 的条件查询命令。

find()/findOne()
mongodb 数据库的查询操作即使用 find()或者 findOne()函数,也可根据不同的条件进行查询。查询的写法(以 find()为例)可以如下:
db.A.find()/db.A.find({})

“{}” 是否省略不影响查询,都表示查找集合 A 下的所有文档。也可以以文档做条件:db.A.find({“a”:1,”b”:1}), 其中查找同时满足属
性 a 等于 1 且属性 b 也等于 1 的文档,若需要满足属性 c 等于 1,可直接添加到文档中:db.A.find({“a”:1,”b”:1,”c”:1})。

指定键的设置
指定键的设置即展示,比如某集合有 10 个属性,经查询后只关心集合中文档的某几个属性。如下文档:
{“_id” : ObjectId(“5018da521781352fe25bf4d2”), “a” : “1”, “b” : “1”, “c” : “1”, “d” : “1”, “e” : “1” }
只关系属性 a,b,c 可如下设置:
db.A.find({},{“a,”:1,”b”:1,”c”:,”_id”:0})
这里的 1 和 0 与文档中的键值是不同意义的,这里的 1:表示显示,0: 表示不显示。其中 ”_id” 键默认存在的,需要显示设置。

结果如下:
{“a” : “1”, “b” : “1”, “c” : “1”}

 

————————————– 条件查询可类比结构化查询语句 SQL——————————————–
条件查询
条件操作符
“$lt”===================>”<“
“$lte”==================>”<=”
“$gt”===================>”>”
“$gte”==================>”>=”
“$ne”===================>”!=”

如:某集合 B 集合中文档有属性 x 值为整数,需查找 10<x<=30 的文档,写法如下:
db.B.find({“x”:{“$gt”:10,”$lte”:30}})

如:从某集合 B 中查找日期属性 day 值大于 2012/01/01 的文档数据,写法如下:
db.B.find({“day”:{“$gt”:new Date(“2012/01/01”)}})
适合于需要进行日调度、月调度、周调度数据等业务处理范围的场合。

$in 包含 /$nin 不包含
$in: 查询匹配指定条件值的文档;
$nin:查询不匹配指定条件值的文档;

SQL:写法:字段 in (‘ 值 1 ’,’ 值 1 ’…..)
mongodb:db.B.find({“x”:{“$in”:[‘ 值 1 ′,’ 值 2 ’,…..]}})

SQL:写法:字段 not in (‘ 值 1 ’,’ 值 1 ’…..)
mongodb:db.B.find({“x”:{“$nin”:[‘ 值 1 ′,’ 值 2 ’,…..]}})

$in/$nin 优点:可指定不同类型条件和值。

$or 或查询

$or: 查询匹配多个条件多个值的文档;

SQL:写法:字段 1 = ‘xxx’ or 字段 2 in (‘xxx’)…..
mongodb:db.B.find({“$or”:[{“x”:{“$in”:[‘ 值 1 ’,’ 值 2 ’…]}},{“y”:”3″}]})

$all 匹配所有

比如文档:
{“name”:jack,”age”:[1,2,3]}
{“name”:jack,”age”:[1,4,3]}

db.B.find({“age”:{“$all”:[2,3]}})结果:{“name”:jack,”age”:[1,2,3]}

$exists 判断文档属性是否存在

db.B.find({“name”:{“$exists”:true}})  – 查找属性 name 存在的文档
db.B.find({“name”:{“$exists”:false}})  – 查找属性 name 不存在的文档

属性值为 null 情况
如下操作并可知道:
> db.C.find()
{“_id” : ObjectId(“5018fccd1781352fe25bf511”), “a” : “14”, “b” : “14” }
{“_id” : ObjectId(“5018fccd1781352fe25bf512”), “a” : “15”, “b” : “15” }
{“_id” : ObjectId(“5018fccd1781352fe25bf510”), “a” : “13”, “b” : “13”, “c” : null }
> db.C.find({“c”:null})
{“_id” : ObjectId(“5018fccd1781352fe25bf511”), “a” : “14”, “b” : “14” }
{“_id” : ObjectId(“5018fccd1781352fe25bf512”), “a” : “15”, “b” : “15” }
{“_id” : ObjectId(“5018fccd1781352fe25bf510”), “a” : “13”, “b” : “13”, “c” : null }
可见查询属性 c 值为 null 文档,包括属性 c 值为 null、该属性 c 不存在两个部分。若想只查询属性 c 为 null 的文档
如下:
> db.C.find({“c”:{“$in”:[null],”$exists”:true}})
{“_id” : ObjectId(“5018fccd1781352fe25bf510”), “a” : “13”, “b” : “13”, “c” : null }

$not 元条件句

可与其他条件配合使用,即不在匹配范围之内的文档,下面可见其用法。

$mod 取模运算

db.B.find({“age”:{“$mod”:[5,1]}}) – 表示查找年龄 / 5 余 1 的所有文档

若查找年龄 / 5 余 1 之外的所有文档,可结合 $not 运算:
db.B.find({“age”:{“$not”:{“$mod”:[5,1]}}})

正则表达式

db.B.find({“name”:/jack/i})

$size

> db.C.find()
{“_id” : ObjectId(“501e71557d4bd700257d8a41”), “a” : “1”, “b” : [1, 2, 3] }
{“_id” : ObjectId(“501e71607d4bd700257d8a42”), “a” : “1”, “b” : [1, 2] }
> db.C.find({“b”:{“$size”:2}})
{“_id” : ObjectId(“501e71607d4bd700257d8a42”), “a” : “1”, “b” : [1, 2] }

$slice

返回数组的一个子集,即对以某属性为基础,返回多少条(范围)。也可以接受偏移值和要返回的元素数量,来返回中间的结果。
> db.C.find()
{“_id” : ObjectId(“501e71557d4bd700257d8a41”), “a” : “1”, “b” : [1, 2, 3] }
{“_id” : ObjectId(“501e71607d4bd700257d8a42”), “a” : “1”, “b” : [1, 2] }
> db.C.findOne({},{“b”:{“$slice”:[2,3]}})
{“_id” : ObjectId(“501e71557d4bd700257d8a41”), “a” : “1”, “b” : [3] }
> db.C.findOne({},{“b”:{“$slice”:-2}})
{
        “_id” : ObjectId(“501e71557d4bd700257d8a41”),
        “a” : “1”,
        “b” : [
                2,
                3
        ]
}

 $where

即可执行任务 javascript 作为查询的一部分。
$where 的值可以是 function、也可以是字符串等等。

db.C.find({“$where”:function(){return this.a == “1”}})与 db.C.find({“$where”:”this.a == ‘1’”}})

注意:采用 $where 子句查询在速度上较常规查询慢的多。因文档需要从 BSON 转换成 javascript 对象,然后通过 ”$where” 的表达式来运行。

不用利用索引。可用常规查询做前置过滤,配置 ”$where” 查询进行调优,可达到不牺牲性能的要求。

至于多表查询,目前还没有用到,以后慢慢研究。条件查询的到这里基本也就满足我的使用了。希望对大家也能有所帮助。

更多 MongoDB 相关教程见以下内容

CentOS 编译安装 MongoDB 与 mongoDB 的 php 扩展 http://www.linuxidc.com/Linux/2012-02/53833.htm

CentOS 6 使用 yum 安装 MongoDB 及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

Ubuntu 13.04 下安装 MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

MongoDB 入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htm

Ubunu 14.04 下 MongoDB 的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

Nagios 监控 MongoDB 分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

基于 CentOS 6.5 操作系统搭建 MongoDB 服务 http://www.linuxidc.com/Linux/2014-11/108900.htm

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134154.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4804字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中