龙空技术网

NoSQL之MongoDB——增删改查简介与插入操作详解

甜橙很酸 224

前言:

现在你们对“phpmongodbupdate”大概比较注重,你们都想要分析一些“phpmongodbupdate”的相关内容。那么小编也在网摘上网罗了一些有关“phpmongodbupdate””的相关内容,希望朋友们能喜欢,兄弟们快快来学习一下吧!

CRUD操作包括创建、读取、更新和删除文档。

创建操作

执行创建或者插入操作可向集合中添加文档。如果集合不存在,插入操作会创建此集合。

MongoDB提供下列方法向集合中插入文档:

db.collection.insert()db.collection.insertOne() New in version 3.2db.collection.insertMany() New in version 3.2

在MongoDB中,插入操作的目标是一个集合。所有的写操作在单文档级别具有原子性。

读操作

读操作是指在一个集合中查找文档;例如查询一个集合中的所有文档。MongoDB提供了下面的方法来读取集合中的文档:

db.collection.find()

你可以指定查询过滤器或准则来确定要返回的文档。

更新操作

更新操作是指修改集合中已存在的文档。MongoDB提供下列方法来执行更新操作:

· db.collection.update()

· db.collection.updateOne() New in version 3.2

· db.collection.updateMany() New in version 3.2

· db.collection.replaceOne() New in version 3.2

在MongoDB中,更新操作的目标是一个集合。所有的写操作在单文档级别具有原子性。

你能够指定准则或者过滤器来确定要更新的文档。更新操作所使用的过滤器和读操作所使用的过滤器具有相同的句法规则。

删除操作

删除操作是指从集合中移除文档。MongoDB提供下列操作来实施删除操作:

· db.collection.remove()

· db.collection.deleteOne() New in version 3.2

· db.collection.deleteMany() New in version 3.2

在MongoDB中,删除操作的目标是一个集合。所有的写操作在单文档级别具有原子性。

你能够指定准则或者过滤器来确定要删除的文档。删除操作所使用的过滤器和读操作所使用的过滤器具有相同的句法规则。

批量写入操作

MongoDB 提供了批量写入文档功能。

1 插入操作1.1 插入方法

为向集合中插入文档,MongoDB提供下列方法:

db.collection.insertOne()db.collection.insertMany()db.collection.insert()

这章提供了一些可在mongo shell中执行的例子:

1.2 插入行为

集合的创建

如果集合不存在,插入操作会创建集合。

_id字段

在MongoDB中,存储在集合中的文档需要一个_id字段作为主键。如果没有指定_id字段,MongoDB会使用ObjectIds 作为_id字段的默认值。例如,待插入文档不包含顶级_id字段,MongoDB会添加一个默认值为ObjectIds 的_id字段。

另外,如果mongod接受一个不包含_id字段的待插入文档(例如,通过一个带有更新设置选项的更新操作),mongod会添加一个默认值为ObjectIds 的_id字段。

原子性

在MongoDB中,写操作在单文档级别具有原子性。

1.3 db.collection.insertOne()

3.2版本中新增

db.collection.insertOne():向集合中插入一个文档。

下面的例子为向集合users 中插入一个新文档。新文档有三个字段:name, age, 和 status,因为文档没有指定_id字段,MongoDB会添加一个值为ObjectIds 的_id字段。

db.users.insertOne( { name: "sue", age: 19, status: "P" })

方法返回执行结果文档中包含操作的状态:

{ "acknowledged" : true, "insertedId" : ObjectId("5742045ecacf0ba0c3fa82b0")}

为了查询已插入的文档,指定关于_id的查询过滤器:

db.users.find( { _id: ObjectId("5742045ecacf0ba0c3fa82b0") } )

1.4 db.collection.insertMany()

3.2版本中新增

db.collection.insertMany():向一个集合中插入多个文档。

下面的例子演示了向集合users 中插入三个文档,每个文档都有三个字段:name, age,和status,因为文档没有指定_id字段,MongoDB会添加一个值为ObjectIds 的_id字段。

db.users.insertMany( [ { name: "bob", age: 42, status: "A", }, { name: "ahn", age: 22, status: "A", }, { name: "xi", age: 34, status: "D", } ])

方法返回执行结果文档中包含操作的状态:

{ "acknowledged" : true, "insertedIds" : [ ObjectId("57420d48cacf0ba0c3fa82b1"), ObjectId("57420d48cacf0ba0c3fa82b2"), ObjectId("57420d48cacf0ba0c3fa82b3") ]}

为了查询已插入的文档,指定关于_id的查询过滤器:

db.users.find( { _id: { $in: [ ObjectId("57420d48cacf0ba0c3fa82b1"), ObjectId("57420d48cacf0ba0c3fa82b2"), ObjectId("57420d48cacf0ba0c3fa82b3") ] } }

)

1.5 db.collection.insert()

db.collection.insert():向集合中插入一个或多个文档。若要插入一个文档,给方法传递一个文档;若要插入多个文档,给方法传递一个文档数组。

下面的例子为向集合users 中插入一个新文档。新文档有三个字段:name, age, 和 status,因为文档没有指定_id字段,MongoDB会添加一个值为ObjectIds 的_id字段。

db.users.insert( { name: "sue", age: 19, status: "P" })

方法返回包含了操作执行状态的WriteResult对象。成功插入操作的返回结果如下:

WriteResult({ "nInserted" : 1 })

nInserted字段指出了已插入文档的数量。如果操作发生错误,WriteResult 对象中会包含错误信息。

下面的例子为向集合users 中插入多个新文档,因为文档没有指定_id字段,MongoDB会为每一个文档添加一个值为ObjectIds 的_id字段。

db.users.insert( [ { name: "bob", age: 42, status: "A", }, { name: "ahn", age: 22, status: "A", }, { name: "xi", age: 34, status: "D", } ])

方法返回包含了操作执行状态的BulkWriteResult对象。成功插入操作的返回结果如下:

BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ]})
1.6 其他方法

下面的方法也能向集合中插入新文档:

· db.collection.update() :当更新设置选项为true时

· db.collection.updateOne() :当更新设置选项为true时

· db.collection.updateMany(): 当更新设置选项为true时

· db.collection.findAndModify() :当更新设置选项为true时

· db.collection.findOneAndUpdate() :当更新设置选项为true时

· db.collection.findOneAndReplace() :当更新设置选项为true时

· db.collection.save().

· db.collection.bulkWrite().

本文内容主要译自官方文档

标签: #phpmongodbupdate