MongoDB 数据增加操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18948359/article/details/88137693

MongoDB 数据增加(insert 操作)

MongoDB 文档的数据结构 和 JSON基本一样。MongoDB 中所有存储在集合中的数据都是BSON格式。BSON是一种类似 JSON 的一种二进制形式的存储格式,简称Binary JSON。

语法

MongoDB 使用 insert() 或 save() 方法向集合中插入文档。

db.COLLECTION_NAME.insert(document) 
# 或者 
db.COLLECTION_NAME.save(document)
# 或者 
db.COLLECTION_NAME.insertOne(document)    // 插入单挑
# 或者 
db.COLLECTION_NAME.insertMany(document)    // 插入多条

实例

插入单条数据:

直接插入使用 Json 格式的数据:

# 语法 
db.collectionName.insert(document)

# 例子
db.logs.insert({"name":"JBL Charge 1", "id":"0001"})

保存数组:

我们可以一次插入多条数据到数据库中(使用 Json 数组就行了):

db.logs.insert([{"name":"JBL Charge 2", "id":"0002"}, {"name":"JBL Charge 3", "id":"0003"}])

图示:

直接实用循环保存数据

由于MongoDB 支持 JS,可以使用下面的操作:

for (var i=0; i<50; i++){ 
    db.logs.insert({"name":"loop insert"+i, "id":"loop"+i})
}

如果数据保存很多的情况下,查询的时候,不会将数据全部列出,只会列出一部分。

创建复杂点的数据

db.logs.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    url: 'http://www.baidu.com',
    tags: ['mongodb', 'database', 'NoSQL']
})

Objectld

       当我们成功的插入一条文档到集合中后,我们会发现多了一个键 "_id" 和自动生成的 ObjectId 类型值。通常会在客户端由驱动程序完成。

  • MongoDB的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。扩展应用层也要比扩展数据库层容易得多。将事务交由客户端来处理,就减轻了数据库扩展的负担。
  • 在客户端生成Objectld,驱动程序能够提供更加丰富的API。

       ObjectId 占用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。由“时间戳”“机器名”“PID号”“计数器”组成。使用机器名的好处是在分布式环境中能够避免单点计数的性能瓶颈。使用PID号的好处是支持同一机器内运行多个mongod实例。最终采用时间戳和计数器的组合来保证唯一性。

1. 机器名(4个字节。从标准纪元开始,单位为秒

  • 时间戳,与随后的5个字节(机器名+PID)组合起来,提供了秒级别的唯一性。
  • 由于时间戳在前,这意味着Objectld大致会按照插入的顺序排列,这对于某些方面很有用,如将其作为索引提高效率,但是这个是没有保证的。
  • 这4个字节也隐含了文档创建的时间。绝大多数驱动都会公开一个方法从Objectld获取这个信息。
     

2. 机器名(3个字节

    所在主机的唯一标识符。通常是机器主机名的散列值,机器名通过Md5加密后取前三个字节。

3.PID(2个字节)

     为了确保在同一台机器上并发的多个进程产生的Objectld是唯一的,所以加上进程标识符(PID).注意到每次重启mongod进程后PID号通常会发生变化就可以了。   

  前9字节保证了同一秒钟不同机器不同进程产生的Objectld是唯一的。

4.计数器(3个字节)

       表示的取值范围就是 256*256*256 = 16777216。一个自动增加的计数器,确保相同进程同一秒产生的 Objectld 也是不一样的同一秒钟最多允许每个进程拥有2563 (16 777 216) 不同的 Objectld。

更多查看官网介绍

猜你喜欢

转载自blog.csdn.net/qq_18948359/article/details/88137693