如何在MongoDB中根据索引删除数组元素?


您可以通过以下两个步骤删除数组元素:

第一步如下:

db.yourCollectionName.update({}, {$unset : {"yourArrayFieldName.yourIndexValue" : 1 }});

上述语法会在“yourIndexValue”的位置放置一个空值。之后,您需要将空值从数组字段中移除,从而删除数组元素。

第二步如下:

db.yourCollectionName.update({}, {$pull : {"yourArrayFieldName" : null}});

为了实现该语法,让我们创建一个包含文档的集合。创建包含文档的集合的查询如下:

> db.removeArrayElementByItsIndexDemo.insertOne({"InstructorName":"David",
   "InstructorAge":28,"InstructorSubject":["MongoDB","MySQL","Java","SQL Server","PL/SQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8abbfc6cea1f28b7aa0803")
}

使用find()方法显示集合中的所有文档。查询如下:

> db.removeArrayElementByItsIndexDemo.find().pretty();

输出如下:

{
   "_id" : ObjectId("5c8abbfc6cea1f28b7aa0803"),
   "InstructorName" : "David",
   "InstructorAge" : 28,
   "InstructorSubject" : [
      "MongoDB",
      "MySQL",
      "Java",
      "SQL Server",
      "PL/SQL"
   ]
}

以下是根据索引删除数组元素的查询。

步骤 1 - 查询如下:

> db.removeArrayElementByItsIndexDemo.update({}, {$unset : {"InstructorSubject.2" : 1 }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

步骤 2 - 查询如下:

> db.removeArrayElementByItsIndexDemo.update({}, {$pull : {"InstructorSubject" : null}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

让我们检查数组元素“Java”是否已被删除。查询如下:

> db.removeArrayElementByItsIndexDemo.find().pretty();

输出如下:

{
   "_id" : ObjectId("5c8abbfc6cea1f28b7aa0803"),
   "InstructorName" : "David",
   "InstructorAge" : 28,
   "InstructorSubject" : [
      "MongoDB",
      "MySQL",
      "SQL Server",
      "PL/SQL"
   ]
}

查看示例输出,数组元素“Java”已被完全删除。

更新于:2019年7月30日

936 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告