MongoDB CRUD Operations

CRUD代表create, read, update和delete文档操作,对应着关系型数据库中的增删改查操作。

1. Create Operations

创建或添加操作将新文档添加到集合中。 如果集合当前不存在,则添加操作将创建集合。

MongoDB提供了以下方法将文档添加到集合:

db.collection.insertOne()版本3.2中的新增功能
db.collection.insertMany()版本3.2中的新增内容

在MongoDB中,添加操作以单个集合为目标。 MongoDB中的所有写入操作都是单个文档级别的原子操作。

1542262684536273.png

添加单个文档

db.collection.insertOne()将单个文档插入到集合中。

以下示例将新文档插入到集合中。 如果文档未指定_id字段,MongoDB会将带有ObjectId值的_id字段添加到新文档中。

db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

添加多个文档

db.collection.insertMany()可以将多个文档插入到集合中。 将一组文档传递给该方法。

以下示例将三个新文档添加到集合中。 如果文档未指定_id字段,MongoDB会将_id字段与ObjectId值一起添加到每个文档。

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])

2. Read Operations

读操作从集合中检索文档; 即查询文档集合。 MongoDB提供了以下方法来从集合中读取文档:

db.collection.find()

可以指定过滤条件以便指定要返回的文档。

1542271532347752.png

下面例子介绍如何使用db.collection.find()方法进行查询操作的示例,通过下面命令填充Inventory集合。

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

选择集合中的所有文档

要选择集合中的所有文档,可将空文档作为查询过滤器参数传递给find方法: 

db.inventory.find({})

此操作对应于以下SQL语句:

SELECT * FROM Inventory;

指定过滤条件

要指定过滤条件,可以在查询过滤器文档中使用<field>:<value>表达式:

{<field1>:<value1>,...}

以下示例从Inventory集合中选择Status等于“D”的所有文档:

db.inventory.find({status:“D”})

此操作对应于以下SQL语句:

SELECT * FROM inventory WHERE status =“D”

使用查询运算符指定条件

查询过滤器文档可以使用查询运算符, 用下列格式指定条件:

{<field1>:{<operator1>:<value1>},...}

以下示例从Inventory集合中检索Status等于“A”或“D”的所有文档:

db.inventory.find({status:{$ in:[“A”,“D”]}})

该操作对应于以下SQL语句:

SELECT * FROM inventory WHERE Status In(“A”,“D”)

3. Update Operations

更新操作可修改集合中的现有文档。 MongoDB提供了以下方法来更新集合的文档:

db.collection.updateOne()版本3.2中的新增功能
db.collection.updateMany()版本3.2中的新增内容
db.collection.replaceOne()版本3.2中的新增内容

在MongoDB中,更新操作以单个集合为目标。 MongoDB中的所有写入操作都是对单个文档级别的原子操作。

可以设置过滤条件以指定要更新的文档。 过滤条件的语法和Read Operation具有相同的语法。

1542271901611411.png

下面示例演示了如何利用以下命令进行更新文档的操作:

db.collection.updateOne(<filter>,<update>,<options>)
db.collection.updateMany(<filter>,<update>,<options>)
db.collection.replaceOne(<filter>,<replacement>,<options>)

我们需要用Inventory集合, 运行以下命令进行集合的填充:

db.inventory.insertMany( [
   { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

更新集合中的文档

为了更新文档,MongoDB提供了更新运算符 (Update Operators),例如$ set,用来修改字段值。

要使用更新运算符,请将更新文档传递给更新方法:

{
   <update operator>:{<field1>:<value1>,...},
   <update operator>:{<field2>:<value2>,...},
  ...
}

如果字段不存在,某些更新运算符(如$ set)将创建该字段。请参见 https://docs.mongodb.com/manual/reference/operator/update/ 获得更加关于更新运算符详细的信息。

更新单个文档

以下示例使用清单集合上的db.collection.updateOne()方法更新Item等于“paper”的第一个文档:

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)

更新操作:

使用$ set运算符将size.uom字段的值更新为“cm”,将Status字段的值更新为“P”,

使用$ currentDate运算符将lastModified字段的值更新为当前日期。 如果lastModified字段不存在,$ currentDate将创建该字段。 

更新多个文档

以下示例使用Inventory集合上的db.collection.updateMany()方法更新qty小于50的所有文档:

db.inventory.updateMany(
   { "qty": { $lt: 50 } },
   {
     $set: { "size.uom": "in", status: "P" },
     $currentDate: { lastModified: true }
   }
)

替换文档

该更新操作可以替换除_id字段之外的文档的整个内容,全新文档作为db.collection.replaceOne()的第二个参数被传递给替换函数。

更换文档时,替换文档必须仅包含字段/值对; 不能包括更新运算符表达式。替换文档可以具有与原始文档不同的字段。 在替换文档中,您可以省略_id字段,因为_id字段是不可变的; 但是,如果包含_id字段,则它必须与当前值具有相同的值。

以下示例替换Inventory集合中的第一个文档,其中项目为“paper”:

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

4.Delete Operations 

删除操作从集合中删除文档。 MongoDB提供了以下方法来删除集合的文档:

db.collection.deleteOne()版本3.2中的新增内容
db.collection.deleteMany()版本3.2中的新增内容

在MongoDB中,删除操作以单个集合为目标。 MongoDB中的所有写入操作都是单个文档级别的原子操作。

可以指定过滤条件来指定要删除的文档。过滤条件的语法和Read Operation具有相同的语法。

1542272190756612.png

下面列举删除文档的操作示例:

db.collection.deleteMany()
db.collection.deleteOne()

此示例使用Inventory集合, 首先 填充Inventory集合,请运行以下命令:

db.inventory.insertMany( [
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
] );

删除所有文件

要从集合中删除所有文档,请将空过滤器文档{}传递给db.collection.deleteMany()方法。

以下示例删除清单集合中的所有文档:

db.inventory.deleteMany({})

删除与条件匹配的所有文档

可以指定过滤条件来指定要删除的文档。 过滤条件的使用与读取操作具有相同的语法。

要指定过滤条件,请在查询过滤器文档中使用<field>:<value>表达式:

{<field1>:<value1>,...}
db.inventory.deleteMany({ status : "A" })

仅删除与条件匹配的第一个文档

删除与指定过滤器匹配的单个(第一个)文档(即使多个文档可能与指定的过滤器匹配),请使用db.collection.deleteOne()方法。

以下示例删除Status为“D”的第一个文档:

db.inventory.deleteOne( { status: "D" } )

MongoDB CRUD Operations

发表评论

邮箱地址不会被公开。 必填项已用*标注

− 一 = 六

滚动到顶部