初学者必备MongoDB操作命令

    xiaoxiao2025-01-26  2

    由于工作需要,笔者这两天学习MongoDB真的很不习惯!但是确实好用,命令比mysqlsqlserver简单很多。在这里整理一些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里对应的命令应该是insertdropupdate。这些只是针对表数据。针对数据库和数据表的没有接触就不说了。下面给大家整理的是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}) 这里的10与文档中的键值是不同意义的,这里的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'.....) mongodbdb.B.find({"x":{"$in":['1','2',.....]}})

    SQL:写法:字段 not in ('1','1'.....) mongodbdb.B.find({"x":{"$nin":['1','2',.....]}})

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

    $or或查询

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

    SQL:写法:字段1 = 'xxx' or 字段2 in ( 'xxx')..... mongodbdb.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不存在两个部分。若想只查询属性cnull的文档 如下: > 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]}}) --表示查找年龄/51的所有文档

    若查找年龄/51之外的所有文档,可结合$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"查询进行调优,可达到不牺牲性能的要求。

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

     

     

    原文来自:Linux社区

    转载请注明原文地址: https://ju.6miu.com/read-1295802.html
    最新回复(0)