如何从MongoDB数组中只删除一个等于值的元素?

时间:2016-12-10 21:05:06

标签: arrays json mongodb

我在mongo db中有一个int数组。有些值会出现多次,如下所示:

{binder : [4,7,9,7]}

我像这样使用拉动

{ $pull: { binder: 7} }

它将删除所有7和i最终:

{binder : [4,9]}

但是我想删除其中一个七人组来获得这样的东西:

{binder : [4,7,9]}

我将如何解决这个问题。数字的索引是未知的,并且副本并不总是在最后/第一个点上。

在尝试和搜索很长一段时间之后,我找到了一种使用$ indexOfArray的方法,我不需要使用它。

1 个答案:

答案 0 :(得分:1)

目前无法从数组中删除一个项目,如文档&#34中所述; $ pull运算符从现有数组中删除一个或多个匹配指定条件的值的实例"

然而,你可以使用这项工作:

从数组中查找并取消设置一项:

> db.arrays.save({ s : [ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 ] })
WriteResult({ "nInserted" : 1 })

> db.arrays.update({ "s" : 5 }, { $unset : { "s.$" : true } })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

这将给我们以下

> db.arrays.find()
{ "_id" : ObjectId("584c707f1c86f44b7300b223"), "s" : [ 1, 2, 3, 4, null, 5, 6, 7, 8, 9, 10 ] }

然后我们可以拉null s

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

我们现在删除的5将会消失:

> db.arrays.find()
{ "_id" : ObjectId("584c707f1c86f44b7300b223"), "s" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] }

这是一个很好的解决方法,但是通过多个原子操作非常安全(只要你不使用null作为有效值)

相关问题