runoops.com

MongoDB 插入文档

本章节中我们将向大家介绍如何将数据插入到 MongoDB 的集合中。

文档的数据结构和 JSON 基本一样。

所有存储在集合中的数据都是 BSON 格式。

BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)
  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。

db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:

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

db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

参数说明:

  • document:要写入的文档。
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

实例

以下文档可以存储在 MongoDB 的 runoops 数据库 的 col 集合中:

> db.col.insert({title: 'MongoDB 教程',
...     description: 'MongoDB 是一个 Nosql 数据库',
...     by: 'runoops自学教程',
...     url: 'http://www.runoops.com',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 1000
... })
WriteResult({ "nInserted" : 1 })
>

以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

查看已插入文档:

> db.col.find()
{ "_id" : ObjectId("62bfade88c761b9926dce91c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "runoops自学教程", "url" : "http://www.runoops.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 1000 }
>

我们也可以将数据定义为一个变量,执行后如下所示:

> document = ({title: 'MongoDB 教程',
...     description: 'MongoDB 是一个 Nosql 数据库',
...     by: 'runoops自学教程',
...     url: 'http://www.runoops.com',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 1000
... });
{
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "runoops自学教程",
        "url" : "http://www.runoops.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 1000
}
>

执行插入操作并查看数据:

> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
> db.col.find()
{ "_id" : ObjectId("62bfade88c761b9926dce91c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "runoops自学教程", "url" : "http://www.runoops.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 1000 }
{ "_id" : ObjectId("62bfaf138c761b9926dce91d"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "runoops自学教程", "url" : "http://www.runoops.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 1000 }
>

插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

3.2 版本后还有以下几种语法可用于插入文档:

  •  db.collection.insertOne():向指定集合中插入一条文档数据
  •  db.collection.insertMany():向指定集合中插入多条文档数据

insertOne 插入单条数据:


> var document = db.col2.insertOne({"a": 3})
> document
{
        "acknowledged" : true,
        "insertedId" : ObjectId("62bfb0818c761b9926dce921")
}
> db.col2.find()
{ "_id" : ObjectId("62bfb0818c761b9926dce921"), "a" : 3 }
>

insertMany 插入多条数据:

> var res = db.col2.insertMany([{"b": 3}, {'c': 4}])
> res
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("62bfb0b18c761b9926dce922"),
                ObjectId("62bfb0b18c761b9926dce923")
        ]
}
> db.col2.find()
{ "_id" : ObjectId("62bfb0818c761b9926dce921"), "a" : 3 }
{ "_id" : ObjectId("62bfb0b18c761b9926dce922"), "b" : 3 }
{ "_id" : ObjectId("62bfb0b18c761b9926dce923"), "c" : 4 }
>

MongoDB 一次插入多条数据

1、先创建数组

2、将数据放在数组中

3、一次 insert 到集合中

var arr = [];

for(var i=1 ; i<=20000 ; i++){
    arr.push({num:i});
}

db.numbers.insert(arr);