差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
public:it:mongodb [2017/01/03 10:38] oakfirepublic:it:mongodb [2019/10/15 18:06] (当前版本) – [Tips] oakfire
行 12: 行 12:
   * 显示当前db: ''db''   * 显示当前db: ''db''
   * 切换db: ''use dbname'' 可以直接切换到一个不存在的db来插入数据, 相当于创建.   * 切换db: ''use dbname'' 可以直接切换到一个不存在的db来插入数据, 相当于创建.
-  * 显示当前db的collection列表 ''show collections''+  * 显示当前db的collection列表 ''show collections'' 或 ''show tables''
   * 插入数据,注意collection可以是事先不存在的, 比如下面的''testData'',命令执行后会自动创建<code javascript>   * 插入数据,注意collection可以是事先不存在的, 比如下面的''testData'',命令执行后会自动创建<code javascript>
 j = { name : "mongo" } j = { name : "mongo" }
行 21: 行 21:
 for (var i = 1; i <= 25; i++) db.testData.insert( { x : i } ) for (var i = 1; i <= 25; i++) db.testData.insert( { x : i } )
 </code> </code>
-  * 查看插入的数据:''db.testData.find()''. mongodb要求每条数据都要有''_id'', 如果没指定, 会自动创建一个.+  * 查看插入的数据:''db.testData.find()'' 
 +  * mongodb要求每条数据都要有''_id'', 如果没指定, 会自动创建一个.
   * ''find()''或其它获取方式的返回数据, 称为''cursor'', 可对此结果进行操作, 比如<code javascript>   * ''find()''或其它获取方式的返回数据, 称为''cursor'', 可对此结果进行操作, 比如<code javascript>
 var c = db.testData.find() var c = db.testData.find()
 while ( c.hasNext() ) printjson( c.next() ) while ( c.hasNext() ) printjson( c.next() )
 </code> </code>
 +  * 查看索引: ''db.testData.getIndexes()'' 
 +  * 设置索引: <code javascript> 
 +db.testData.createIndex({ "your_index": 1})//1为正序,-1为逆序 
 +</code> 
 +  * 设置一段时间后自动删除数据: [[https://docs.mongodb.com/manual/tutorial/expire-data/|官网文档]] <code javascript> 
 +db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } ) //表示在文档索引"createAt"设定的时间值之后3600秒自动删除此条文档 
 +</code> 
 +===== Auth ===== 
 +  * mongodb 启动时加 ''--auth'' 才开启用户认证; 
 +  * mongodb 开启认证后, 默认 admin 数据库没有用户,此时可添加用户及相应的 [[https://docs.mongodb.com/manual/reference/built-in-roles/#all-database-roles|role]] , 一般是 ''userAdminAnyDatabase'',即能对所有数据库进行用户管理;<code javascript> 
 +use admin; 
 +db.createUser( 
 +  { 
 +    user: "myUserAdmin", 
 +    pwd: "abc123", 
 +    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] 
 +  } 
 +
 +</code> 
 +  * admin 数据库里有用户后,后续操作就需要认证。用户管理需要以 admin 数据库登录再 ''use dbname'' ,然后用[[https://docs.mongodb.com/manual/reference/method/#user-management-methods|用户管理函数]]操作 
 +  * 可以给用户添加''dbAdminAnyDatabase''角色以操作所有数据库角色(userAdmin 只操作当前数据库用户)。 
 +  * 客户端或 shell 登录时如果指定了数据库名称,那么<wrap em>就只能用该数据库里的用户登录</wrap>(''db.getUsers()''里列出的)。 
 +  * 查看数据库状态的角色是 ''clusterMonitor'',  给用户添加角色 <code javascript>db.grantRolesToUser( 
 +  "myuser", 
 +   [ 
 +     { role: "clusterMonitor", db:"admin"}  
 +   ] 
 +);</code>
 ===== Tools ===== ===== Tools =====
 +==== Mongoose ====
   * [[https://github.com/Automattic/mongoose|Mongoose]]: MongoDB ODM   * [[https://github.com/Automattic/mongoose|Mongoose]]: MongoDB ODM
 +  * schema 
 +===== Tips ===== 
 +  * mongo 的 docker 镜像,在 OSX/Windows 下不能用容器外存储。   
 +  * mongo 的 collections 数量限制上限为命名空间数量,命名空间包括 collection 名称与索引名称, 上限大概为24000个,可调整。<wrap em>但 [[https://docs.mongodb.com/manual/reference/limits/| 新的 WiredTiger 引擎不受此限制]] 
 +</wrap> 
 +  * mongo 默认的 _id 是默认索引,前四字节为 unixtime 秒数,即''ObjectId("59d0a08032b1ec00019f70b9"''的''59d0a080''为 unixtime, 可用此来按插入时间操作数据, 比如<code javascript> db.testData.find({"_id" : { $lt: ObjectId("59d0a0800000000000000000")} })</code> 
 +  * mongo3 删除数据或者表并不会释放磁盘空间,释放磁盘空间可以删除数据库 ''db.dropDatabase()'', 或者使用 ''db.repairDatabase()'', 但是后者必须空余的磁盘空间大于数据库实际大小才能成功。释放磁盘空间方法参考:https://yq.aliyun.com/articles/606187
  
  
  
  • public/it/mongodb.1483411093.txt.gz
  • 最后更改: 2017/01/03 10:38
  • oakfire