Removing the array element in mongoDB based on the position of element

人走茶凉 提交于 2019-12-17 19:52:47

问题


Actually I need to remove an element from the array based on its position. Using $pop we can remove element from top or bottom (considering it as a stack. 0th element at top) as explained here.

We can also remove element from array based on the value of the elements in the array using $pull as explained here.

But I need to remove element from the array based on position. So is there any way I can do this.


回答1:


From documentation:

{ $pull : { field : {$gt: 3} } } removes array elements greater than 3

So i suppose that you can do somethig like this for now:

{ $pull : { field : {$gt: 3, $lt: 5} } } // shoud remove elemet in 4 position 

Or try update using position operator, i suppose shoud be something like this:

  { $pull : "field.4" } 

  { $pull : {"field.$": 4}}

It is only a suggestion, because i can't test it right now.

Update:

Seems you cant do it right know in one step(there is such bug in jira)

But you can remove using unset element in position and that pull elemets with null value:

{$unset : {"array.4" : 1 }}
{$pull : {"array" : null}}



回答2:


Here's your answer MongoDB pull array element from a collection

To remove specific element from an array of some document first you need to identify this element. For instance I have a document with array and every element of this array is an object:

`{
    "_id" : ObjectId("5140f34888dd50971900002d"),
    "_permissions" : {
        "edit" : [
            {
                "profile_id" : NumberLong(123),
                "comment" : "app/project owner"
            },
            {
                "profile_id" : NumberLong("153579099841888257"),
                "comment" : "project admin"
            },
            {
                "profile_id" : NumberLong("153579095869882369"),
                "comment" : "project admin"
            }
        ],
        "view" : [
            {
                "profile_id" : NumberLong(123),
                "comment" : "app/project owner"
            },
            {
                "profile_id" : NumberLong("153579099841888257"),
                "comment" : "project admin"
            },
            {
                "profile_id" : NumberLong("153579095869882369"),
                "comment" : "project admin"
            }
        ]
    }
}`

So let's remove "profile_id" with "153579099841888257" value from "_permissions.view" array. Here we go

`db.collection.update({_id: ObjectId("5140f34888dd50971900002d")}, {$pull:{"_permissions.view": {"profile_id": NumberLong("153579099841888257")}}});`
  1. I define scope of the object (to make sure id doesn't affect any other first found document)
  2. Identify needed element to pull out: "profile_id" with "153579099841888257" value in the "_permissions.view" array


来源:https://stackoverflow.com/questions/4969768/removing-the-array-element-in-mongodb-based-on-the-position-of-element

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!