admin 发布的文章

1、查看硬盘与目录的容量df :可以列文件系统磁盘分区的使用量df -k 可以按K来查,df -m可以按M来查

用df -i可以查看inode使用情况,inode用满了,也是不能新建文件的du :可以查看当前目录下各目录及文件的大小:du -sk * 按K来算,du -sm * 按M来算

2、磁盘分区命令 fdiskfdisk -l会列出系统的分区,有时重启系统后,有些没有挂,可以用这个列出来:

3、磁盘格式化mkfsmfks -t ext3 /dev/sda6 //将sda6分区格式化为ext3格式mke2fs 是一个更详细的命令,可以指定卷标,block大小,以及inode的数量,例如:mke2fs -t ext4 -b 8192 /dev/sdb54、磁盘检查fsck 一般系统文件有问题时,需要用fsck检查,可以直接运行,也可以参数:检查etx4 档案系统的 /dev/hda5 是否正常,如果有异常便自动修复 :fsck -t etx4 -a /dev/hda5badblocks,可以检查硬盘扇区是否有坏轨,如:badblocks以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里# badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list5、磁盘挂载及卸载mount,umount如挂/dev/sda6 到/slview:mkdir /slviewmount /dev/sda6 /slview卸载:umount /slview6、开机时挂载/etc/fstab,/etc/mtab/etc/fstab保存挂载信息,开机时自动挂载,所以你有些外接的设备,开机没有自动挂的话,可以加到这文件:

因为要目录是必须的,而且是优先的,一定要放在前面/etc/mtab记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等

mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。

但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。

所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。


原子操作数据模型

考虑下面的例子,图书馆的书籍及结账信息。

实例说明了在一个相同的文档中如何确保嵌入字段关联原子操作(update:更新)的字段是同步的。

book= {_id: 123456789,title: "MongoDB: The Definitive Guide",author: [ "Kristina Chodorow", "Mike Dirolf" ],published_date: ISODate("2010-09-24"),pages: 216,language: "English",publisher_id: "oreilly",available: 3,checkout: [ { by: "joe",date: ISODate("2012-10-15") } ]
        }

你可以使用 db.collection.findAndModify() 方法来判断书籍是否可结算并更新新的结算信息。

在同一个文档中嵌入的 available 和 checkout 字段来确保这些字段是同步更新的:

db.books.findAndModify( {query: {_id: 123456789,available: {$gt: 0 }
          },update: {$inc: {available: -1 },$push: {checkout: { by: "abc",date: new Date() } }
           }
} )


原子操作常用命令

$set

用来指定一个键并更新键值,若键不存在并创建。

{$set: {field:value} }

$unset

用来删除一个键。

{$unset: {field: 1} }

$inc

$inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。

{$inc: {field:value} }

$push

用法:

{$push: {field:value} }

把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。

$pushAll

同$push,只是一次可以追加多个值到一个数组字段内。

{$pushAll: {field:value_array} }

$pull

从数组field内删除一个等于value值。

{$pull: {field:_value} }

$addToSet

增加一个值到数组内,而且只有当这个值不在数组内才增加。

$pop

删除数组的第一个或最后一个元素

{$pop: {field: 1 } }

$rename

修改字段名称

{$rename: {old_field_name:new_field_name} }

$bit

位操作,integer类型

{$bit: {field: {and : 5}}}

偏移操作符

>t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }
 
>t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true )
 
>t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }

环境配置

在 Java 程序中如果要使用 MongoDB,你需要确保已经安装了 Java 环境及 MongoDB JDBC 驱动。

本章节实例时候 Mongo 3.x 以上版本。

你可以参考本站的Java教程来安装Java程序。现在让我们来检测你是否安装了 MongoDB JDBC 驱动。


连接数据库

连接数据库,你需要指定数据库名称,如果指定的数据库不存在,mongo会自动创建数据库。

连接数据库的Java代码如下:

importcom.mongodb.MongoClient;
importcom.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
       // 连接到 mongodb 服务
         MongoClientmongoClient= new MongoClient( "localhost" , 27017 );
       
         // 连接到数据库
         MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
       System.out.println("Connect to database successfully");
        
      }catch(Exceptione){
        System.err.println(e.getClass().getName() + ": " +e.getMessage() );
     }
   }
}

现在,让我们来编译运行程序并连接到数据库 mycol。

你可以根据你的实际环境改变 MongoDB JDBC 驱动的路径。

本实例将 MongoDB JDBC 启动包 mongo-java-driver-3.2.2.jar 放在本地目录下:

$ javac-cp.:mongo-java-driver-3.2.2.jar MongoDBJDBC.java
$ java
-cp.:mongo-java-driver-3.2.2.jar MongoDBJDBC Connectto database successfullyAuthentication: true

本实例中 Mongo 数据库无需用户名密码验证。如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:

importjava.util.ArrayList;  
importjava.util.List;  
importcom.mongodb.MongoClient;  
importcom.mongodb.MongoCredential;  
importcom.mongodb.ServerAddress;  
importcom.mongodb.client.MongoDatabase;  
  
public class MongoDBJDBC {  
    public static voidmain(String[]args){  
        try {  
            //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
            //ServerAddress()两个参数分别为 服务器地址 和 端口
            ServerAddressserverAddress= new ServerAddress("localhost",27017);  
            List<ServerAddress>addrs= new ArrayList<ServerAddress>();addrs.add(serverAddress);  
              
            //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
            MongoCredentialcredential= MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());  
            List<MongoCredential>credentials= new ArrayList<MongoCredential>();credentials.add(credential);  
              
            //通过连接认证获取MongoDB连接
            MongoClientmongoClient= new MongoClient(addrs,credentials);  
              
            //连接到数据库
            MongoDatabasemongoDatabase=mongoClient.getDatabase("databaseName");  
            System.out.println("Connect to database successfully");  
        } catch (Exceptione) {  
            System.err.println(e.getClass().getName() + ": " +e.getMessage() );  
        }  
    }  
}


创建集合

我们可以使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合

代码片段如下:

importcom.mongodb.MongoClient;
importcom.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
      // 连接到 mongodb 服务
      MongoClientmongoClient= new MongoClient( "localhost" , 27017 );
         
       
      // 连接到数据库
      MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
      System.out.println("Connect to database successfully");mongoDatabase.createCollection("test");
      System.out.println("集合创建成功");
        
      }catch(Exceptione){
        System.err.println(e.getClass().getName() + ": " +e.getMessage() );
     }
   }
}

编译运行以上程序,输出结果如下:

Connectto database successfully集合创建成功


获取集合

我们可以使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合

代码片段如下:

importorg.bson.Document;
importcom.mongodb.MongoClient;
importcom.mongodb.client.MongoCollection;
importcom.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
       // 连接到 mongodb 服务
         MongoClientmongoClient= new MongoClient( "localhost" , 27017 );
       
         // 连接到数据库
         MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
       System.out.println("Connect to database successfully");
      
       MongoCollection<Document>collection=mongoDatabase.getCollection("test");
       System.out.println("集合 test 选择成功");
      }catch(Exceptione){
        System.err.println(e.getClass().getName() + ": " +e.getMessage() );
     }
   }
}

编译运行以上程序,输出结果如下:

Connectto database successfully集合test选择成功


插入文档

我们可以使用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档

代码片段如下:

importjava.util.ArrayList;
importjava.util.List;
importorg.bson.Document;

importcom.mongodb.MongoClient;
importcom.mongodb.client.MongoCollection;
importcom.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClientmongoClient= new MongoClient( "localhost" , 27017 );
         
         // 连接到数据库
         MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");
         
         MongoCollection<Document>collection=mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");
         //插入文档
         /** 
* 1. 创建文档 org.bson.Document 参数为key-value的格式
* 2. 创建文档集合List<Document>
* 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
* */
Documentdocument= new Document("title", "MongoDB").append("description", "database").append("likes", 100).append("by", "Fly"); List<Document>documents= new ArrayList<Document>();documents.add(document);collection.insertMany(documents); System.out.println("文档插入成功"); }catch(Exceptione){ System.err.println(e.getClass().getName() + ": " +e.getMessage() ); } } }

编译运行以上程序,输出结果如下:

Connectto database successfully集合test选择成功
文档插入成功


检索所有文档

我们可以使用 com.mongodb.client.MongoCollection 类中的 find() 方法来获取集合中的所有文档。

此方法返回一个游标,所以你需要遍历这个游标。

代码片段如下:

importorg.bson.Document;
importcom.mongodb.MongoClient;
importcom.mongodb.client.FindIterable;
importcom.mongodb.client.MongoCollection;
importcom.mongodb.client.MongoCursor;
importcom.mongodb.client.MongoDatabase;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClientmongoClient= new MongoClient( "localhost" , 27017 );
         
         // 连接到数据库
         MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");
         
         MongoCollection<Document>collection=mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");
         
         //检索所有文档
         /** 
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
FindIterable<Document>findIterable=collection.find(); MongoCursor<Document>mongoCursor=findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); } }catch(Exceptione){ System.err.println(e.getClass().getName() + ": " +e.getMessage() ); } } }

编译运行以上程序,输出结果如下:

Connectto database successfully集合test选择成功
Document{{_id=56e65fb1fd57a86304fe2692,title=MongoDB,description=database,likes=100, by=Fly}}


更新文档

你可以使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档。

代码片段如下:

importorg.bson.Document;
importcom.mongodb.MongoClient;
importcom.mongodb.client.FindIterable;
importcom.mongodb.client.MongoCollection;
importcom.mongodb.client.MongoCursor;
importcom.mongodb.client.MongoDatabase;
importcom.mongodb.client.model.Filters;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClientmongoClient= new MongoClient( "localhost" , 27017 );
         
         // 连接到数据库
         MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");
         
         MongoCollection<Document>collection=mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");
         
         //更新文档   将文档中likes=100的文档修改为likes=200collection.updateMany(Filters.eq("likes", 100), new Document("$set",new Document("likes",200)));  
         //检索查看结果
         FindIterable<Document>findIterable=collection.find();  
         MongoCursor<Document>mongoCursor=findIterable.iterator();  
         while(mongoCursor.hasNext()){  
            System.out.println(mongoCursor.next());  
         }  
      
      }catch(Exceptione){
         System.err.println(e.getClass().getName() + ": " +e.getMessage() );
      }
   }
}

编译运行以上程序,输出结果如下:

Connectto database successfully集合test选择成功
Document{{_id=56e65fb1fd57a86304fe2692,title=MongoDB,description=database,likes=200, by=Fly}}


删除第一个文档

要删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的 findOne()方法来获取第一个文档,然后使用remove 方法删除。

代码片段如下:

importorg.bson.Document;
importcom.mongodb.MongoClient;
importcom.mongodb.client.FindIterable;
importcom.mongodb.client.MongoCollection;
importcom.mongodb.client.MongoCursor;
importcom.mongodb.client.MongoDatabase;
importcom.mongodb.client.model.Filters;

public class MongoDBJDBC{
   public static voidmain( Stringargs[] ){
      try{   
         // 连接到 mongodb 服务
         MongoClientmongoClient= new MongoClient( "localhost" , 27017 );

         // 连接到数据库
         MongoDatabasemongoDatabase=mongoClient.getDatabase("mycol");  
         System.out.println("Connect to database successfully");

         MongoCollection<Document>collection=mongoDatabase.getCollection("test");
         System.out.println("集合 test 选择成功");

         //删除符合条件的第一个文档collection.deleteOne(Filters.eq("likes", 200));  
         //删除所有符合条件的文档collection.deleteMany(Filters.eq("likes", 200));  
         //检索查看结果
         FindIterable<Document>findIterable=collection.find();  
         MongoCursor<Document>mongoCursor=findIterable.iterator();  
         while(mongoCursor.hasNext()){  
           System.out.println(mongoCursor.next());  
         }  
           
      }catch(Exceptione){
        System.err.println(e.getClass().getName() + ": " +e.getMessage() );
     }
   }
}

编译运行以上程序,输出结果如下:

Connectto database successfully集合test选择成功

更多操作可以参考:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/

参考文档:http://blog.csdn.net/ererfei/article/details/50857103

http://www.runoob.com/mongodb/mongodb-java.html

MongoDB 使用 update()save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。


update() 方法

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(
   <query>,
   <update>,
   {upsert: <boolean>,multi: <boolean>,writeConcern: <document>
   }
)

参数说明:

  • query: update的查询条件,类似sql update查询内where后面的。
  • update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern:可选,抛出异常的级别。

实例

我们在集合 col 中插入如下数据:

>db.col.insert({title: 'MongoDB 教程',description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
})

接着我们通过 update() 方法来更新标题(title):

>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息
>db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
>

可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"。

以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})


save() 方法

save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(
   <document>,
   {writeConcern: <document>
   }
)

参数说明:

  • document: 文档数据。
  • writeConcern:可选,抛出异常的级别。

实例

以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

>db.col.save({
	"_id" : ObjectId("56064f89ade2f21f36b03136"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Runoob",
    "url" : "http://www.runoob.com",
    "tags" : [
            "mongodb",
            "NoSQL"
    ],
    "likes" : 110
})

替换成功后,我们可以通过 find() 命令来查看替换后的数据

>db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Runoob",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "NoSQL"
        ],
        "likes" : 110
}
>


更多实例

只更新第一条记录:

db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新:

db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一条:

db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加加进去:

db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新:

db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一条记录:

db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
http://www.runoob.com/mongodb/mongodb-update.html

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。

下表将帮助您更容易理解Mongo中的一些概念:

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

通过下图实例,我们也可以更直观的的了解Mongo中的一些概念:


数据库

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

"show dbs" 命令可以显示所有数据的列表。

$./mongoMongoDBshell version: 3.0.6connecting to:test>show dbslocal  0.078GBtest0.078GB
>

执行 "db" 命令可以显示当前数据库对象或集合。

$./mongoMongoDBshell version: 3.0.6connecting to:test>db
test
>

运行"use"命令,可以连接到一个指定的数据库。

> use localswitched to dblocal
>dblocal
>

以上实例命令中,"local" 是你要链接的数据库。

在下一个章节我们将详细讲解MongoDB中命令的使用。

数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

  • 不能是空字符串("")。
  • 不得含有' '(空格)、.、$、/、\和\0 (空宇符)。
  • 应全部小写。
  • 最多64字节。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。


文档

文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

一个简单的文档例子如下:

{"site":"www.runoob.com", "name":"菜鸟教程"}

下表列出了 RDBMS 与 MongoDB 对应的术语:

RDBMS MongoDB
数据库 数据库
表格 集合
文档
字段
表联合 嵌入文档
主键 主键 (MongoDB 提供了 key 为 _id )
数据库服务和客户端
Mysqld/Oracle mongod
mysql/sqlplus mongo

需要注意的是:

  1. 文档中的键/值对是有序的。
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  3. MongoDB区分类型和大小写。
  4. MongoDB的文档不能有重复的键。
  5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

  • 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
  • .和$有特别的意义,只有在特定环境下才能使用。
  • 以下划线"_"开头的键是保留的(不是严格要求的)。


集合

集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

比如,我们可以将以下不同数据结构的文档插入到集合中:

{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.runoob.com","name":"菜鸟教程","num":5}

当第一个文档插入时,集合就会被创建。

合法的集合名

  • 集合名不能是空字符串""。
  • 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  • 集合名不能以"system."开头,这是为系统集合保留的前缀。
  • 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

如下实例:

db.col.findOne()

capped collections

Capped collections 就是固定大小的collection。

它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。

Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。

要注意的是指定的存储大小包含了数据库的头信息。

db.createCollection("mycoll", {capped:true,size:100000})
  • 在capped collection中,你能添加新的对象。
  • 能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。
  • 数据库不允许进行删除。使用drop()方法删除collection所有的行。
  • 注意: 删除之后,你必须显式的重新创建这个collection。
  • 在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。


元数据

数据库的信息是存储在集合中。它们使用了系统的命名空间:

dbname.system.*

在MongoDB数据库中名字空间 <dbname>.system.* 是包含多种系统信息的特殊集合(Collection),如下:

集合命名空间 描述
dbname.system.namespaces 列出所有名字空间。
dbname.system.indexes 列出所有索引。
dbname.system.profile 包含数据库概要(profile)信息。
dbname.system.users 列出所有可访问数据库的用户。
dbname.local.sources 包含复制对端(slave)的服务器信息和状态。

对于修改系统集合中的对象有如下限制。

在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。

{{system.users}}是可修改的。 {{system.profile}}是可删除的。


MongoDB 数据类型

下表为MongoDB中常用的几种数据类型。

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Arrays 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。

原文:http://www.runoob.com/mongodb/mongodb-databases-documents-collections.html