如何在MongoDB中删除数组元素?

要在MongoDB中删除数组元素,可以使用$pull和$in运算符。语法如下:

db.yourCollectionName.update({},
   {$pull:{yourFirstArrayName:{$in:["yourValue"]},yourSecondArrayName:"yourValue"}},
   {multi:true}
);

为了理解上述语法,让我们创建一个带有文档的集合。用于创建包含文档的集合的查询如下:

>db.removeArrayElement.insertOne({"StudentName":"Larry","StudentCoreSubject":["MongoD
B","MySQL","SQL Server","Java"],"StudentFavouriteTeacher":["John","Marry","Carol"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6ec9c46fd07954a4890688")
}

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

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

以下是输出:

{
   "_id" : ObjectId("5c6ec9c46fd07954a4890688"),
   "StudentName" : "Larry",
   "StudentCoreSubject" : [
      "MongoDB",
      "MySQL",
      "SQL Server",
      "Java"
   ],
   "StudentFavouriteTeacher" : [
      "John",
      "Marry",
      "Carol"
   ]
}

这是删除MongoDB中的数组元素的查询:

> db.removeArrayElement.update({},
... {$pull:{StudentCoreSubject:{$in:["Java"]},StudentFavouriteTeacher:"Marry"}},
... {multi:true}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

我们从上方的第一个数组(“ StudentCoreSubject”)获得了“ Java”元素,从第二个数组(“ StudentFavouriteTeacher”)获得了第二个值“ Marry”元素。

让我们再次显示集合中的文档,以检查两个元素是否已删除。查询如下:

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

以下是输出:

{
   "_id" : ObjectId("5c6ec9c46fd07954a4890688"),
   "StudentName" : "Larry",
   "StudentCoreSubject" : [
      "MongoDB",
      "MySQL",
      "SQL Server"
   ],
   "StudentFavouriteTeacher" : [
      "John",
      "Carol"
   ]
}

查看上面的示例输出,第一个数组中没有“ Java”元素(“ StudentCoreSubject”),第二个数组中没有“ Marry”元素(“ StudentFavouriteTeacher”)。因此,我们已成功将它们从集合中删除。