Mongodb shell语法笔记

#帮助
> db.help()
DB methods:
        db.addUser(username, password[, readOnly=false])
        db.auth(username, password)
        db.cloneDatabase(fromhost)
... ...

#查看所有数据库  
> show dbs
local   (empty)
... ...

#新建/打开数据库
> use sybn
switched to db sybn

#向集合users插入数据
> db.users.save({username:"sybn", sex:"male"})
> db.users.save({username:"eva", sex:"femail"})
> db.users.save({username:"adam", sex:"mail"})

#查询集合
> show collections
system.indexes
users

#查看各collection的状态 
> db.printCollectionStats()
system.indexes
{
        "ns" : "sybn.system.indexes",
        "count" : 1,
        "size" : 68,
        "avgObjSize" : 68,
        "storageSize" : 4096,
        "numExtents" : 1,
        "nindexes" : 0,
        "lastExtentSize" : 4096,
        "paddingFactor" : 1,
        "flags" : 0,
        "totalIndexSize" : 0,
        "indexSizes" : {

        },
        "ok" : 1
}
---
users
{
        "ns" : "sybn.users",
        "count" : 3,
        "size" : 172,
        "avgObjSize" : 57.333333333333336,
        "storageSize" : 4096,
        "numExtents" : 1,
        "nindexes" : 1,
        "lastExtentSize" : 4096,
        "paddingFactor" : 1,
        "flags" : 1,
        "totalIndexSize" : 8176,
        "indexSizes" : {
                "_id_" : 8176
        },
        "ok" : 1
}
---

#显示当前db状态
>  db.stats();
{
        "db" : "sybn",
        "collections" : 3,
        "objects" : 7,
        "avgObjSize" : 48,
        "dataSize" : 336,
        "storageSize" : 12288,
        "numExtents" : 3,
        "indexes" : 1,
        "indexSize" : 8176,
        "fileSize" : 16777216,
        "nsSizeMB" : 16,
        "ok" : 1
}

#查看当前db的链接机器地址
> db.getMongo();
connection to 127.0.0.1

查看聚集集合基本信息
1、查看帮助  db.yourColl.help();
2、查询当前集合的数据条数  db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息  db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();


#查询集合users的数据 默认每页显示20条,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:it命令不能带分号
> db.users.find()
{ "_id" : ObjectId("530adc46fa6bc5c4672ba23f"), "username" : "sybn", "sex" : "male" }
{ "_id" : ObjectId("530adc46fa6bc5c4672ba240"), "username" : "eva", "sex" : "femail" }
{ "_id" : ObjectId("530adc47fa6bc5c4672ba241"), "username" : "adam", "sex" : "mail" }

#查询分页(sort:排序,limit:结果集长度限制,skip:结果集起始位置)
> db.users.find().sort({username: 1}).limit(1).skip(2)
{ "_id" : ObjectId("530adc46fa6bc5c4672ba23f"), "username" : "sybn", "sex" : "male" }

#查询指定列的数据(1为显示,0为屏蔽,id默认显示,其他默认屏蔽)
> db.users.find({}, {_id: 0, username:1});
{ "username" : "sybn" }
{ "username" : "eva" }
{ "username" : "adam" }

# "$gt" 、"$gte"、 "$lt"、 "$lte" 大于小于,不解释
# "$and"、"$nor"、"$not"、"$or" 与或非,不解释
# "$all" 完整匹配数组
# "$size" 查询指定长度的素组
# "null" 是否为空或不存在
# "$exists" 是否存在
# "$in"、"$nin" 数组包含指定元素
# "$mod" 取模(求余数) find({ amount: {$mod:[4,0]} }) 即除4余0

#正则查询
> db.users.find({username:/a/});
> db.users.find({username:{$regex:'a',$options:'i'}});
{ "_id" : ObjectId("530adc46fa6bc5c4672ba240"), "username" : "eva", "sex" : "femail" }
{ "_id" : ObjectId("530adc47fa6bc5c4672ba241"), "username" : "adam", "sex" : "mail" }

# $options (使用$regex )
i   如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m   默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行).如果目标字符串 中没有 "\n"字符,或者模式中没有出现“行首”/“行末”字符,设置这个修饰符不产生任何影响。
s    如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。
x    如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 。
  注:JavaScript只提供了i和m选项,x和s选项必须使用$regex操作符

# "$where"
操作符功能强大而且灵活,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。

  新建fruit集合并插入如下文档:

//插入两条数据
db.fruit.insert({"apple":1, "banana": 4, "peach" : 4})
db.fruit.insert({"apple":3, "banana": 3, "peach" : 4})
  比较文档中的两个键的值是否相等.例如查找出banana等于peach键值的文档(4种方法):

//JavaScrip字符串形式
db.fruit.find( { $where: "this.banana == this.peach" } )
db.fruit.find( { $where: "obj.banana == obj.peach" } )

//JavaScript函数形式
db.fruit.find( { $where: function() { return (this.banana == this.peach) } } )
db.fruit.find( { $where: function() { return obj.banana == obj.peach; } } )

# "$slice" 数组分页
# "$elemMatch" 投影操作符将限制查询返回的数组字段的内容只包含匹配elemMatch条件的数组元素。


参考: http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html



参考: http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章