要在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”)。因此,我们已成功将它们从集合中删除。