数组查询



数组查询

MongoDB 中有子文档的概念,一个文档中能方便的嵌入子文档,这与关系性数据库有着明显的不同,在查询时,语法有一些注意点。

例子代码,假如我们的一个集合(tests)中存在标签键,有如下模式:



tags:[ObjectId]

查询含有某个标签 ID 的文档

db.tests.find({tags: tagId});

我现在有一组标签 tagIds,即是数组,需要查询含有该数组中任一元素的文档,此时需要用到 $in 操作符


db.tests.find({tags:{$in: tagIds}});

如需唯一匹配该数组,与通常查询无异


db.tests.find({tags: tagIds});

如不考虑顺序关系影响,即同时含有 tagIds 中的每个元素,用 $all


db.tests.find({tags:{$all: tagIds}});



 



 MongoDB数据导出及导入



MongoDB 数据导出及导入

我目前用到的分别是 mongodump 和 mongorestore,他们语法挺相似。

导出

 



mongodump --host localhost:27017/data/backup/csser.com/csser.3-9/

表示将当前数据库导出到 csser.3-9 目录中去,导入用 mongorestore 即可恢复。


 

导入

 



mongorestore --host localhost:27017/data/backup/csser.com/csser.3-9/

表示将 

csser.3-9 目录下的数据导入到 MongoDB 中。


 



 安全停止并退出MongoDB



安全停止并退出 MongoDB

无论如何都要避免直接 kill -9

 


$ sudo kill -2 pid // SIGINT// 或
$ sudo kill pid // SIGTERM


 



 查看集合占用空间



查看集合占用空间

 



> db.sessions.dataSize()22658540



 



 监控和释放MongoDB占用的内存



监控和释放 MongoDB 占用的内存

查看内存使用情况:

 



PRIMARY>use csser
switched to db csser
PRIMARY> db.serverStatus().mem
{"bits":64,"resident":82,"virtual":5366,"supported":true,"mapped":2463,"mappedWithJournal":4926}

释放内存:


 

 

db.runCommand({closeAllDatabases:1})


 



 查看MongoDB连接数



查看 MongoDB 连接数

 



> db.serverStatus().connections
{"current":10,"available":809}



 



 进入Shell



进入 Shell

通过 mongo 命令连接数据库后,会自动进入 MongoDB Shell,默认连接的是 test 数据库,进行如下操作了解 Shell 基本指令:



> help
db.help()#查看 db 方法
db.mycoll.help()#查看集合方法
rs.help()#查看 replica set 方法
help admin                   #管理员帮助
help connect                 #连接数据库帮助
help keys                    #快捷键帮助
help misc                    #了解 misc 
help mr                      #mapreduce

show dbs                     #打印本服务器存在的数据库名称列表
show collections             #打印当前数据库的集合列表
show users                   #打印当前数据库的用户
show profile                 #打印 1s 内的 system.profile
show logs                    #打印 logger 名称
show log [name]#打印内存中最新的一条日志记录,[name] 默认为 'global'use<db_name>#切换数据库
db.foo.find()#列出集合 foo 中的对象列表
db.foo.find({ a :1})#列出集合 foo 中满足条件 a== 1 的对象列表
it                           #查看 find 返回列表的其余部分DBQuery.shellBatchSize = x   #设置 shell 默认显示的项的个数exit#退出 mongodb shell



 连接数据库



连接数据库

mongo [options][db address][文件名(以.js结尾)]

db address 可以只指定数据库名(比如:csser),此时连接本地数据库csser。

也可以这样:192.169.0.5:27018/csser,表明连接192.169.0.5服务器27018端口的csser数据库,端口号可以省略,默认为27017。

如果指定文件名,在不指定 --shell 参数的情况下,进程在执行完这些js文件之后会自动退出,文件名必须以.js结尾。

查看 MongoDB 版本:

 

mongo --version

在运行 mongo 命令时不自动连接数据库:

 

 

mongo --nodb