我在mongo db中有一个int数组。有些值会出现多次,如下所示:
{binder : [4,7,9,7]}
我像这样使用拉动
{ $pull: { binder: 7} }
它将删除所有7和i最终:
{binder : [4,9]}
但是我想删除其中一个七人组来获得这样的东西:
{binder : [4,7,9]}
我将如何解决这个问题。数字的索引是未知的,并且副本并不总是在最后/第一个点上。
在尝试和搜索很长一段时间之后,我找到了一种使用$ indexOfArray的方法,我不需要使用它。
答案 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
作为有效值)