0

I am trying to remove some items from an array in a document in MongoDB:

doc1
  items
    item
       id=1
    item
       id=2
    item
       id=3
doc2
  items
    item
      id=4
    item
      id=5
    item
      id=6

I use this to remove for example item id=5:

(...)
updateItems({'items.id': 5},    { $unset: { 'items.$': 1 }},    { $pull: {'items'    : null} });
(...)
function updateItems(objmatch, objunset, objpull){  
coremodels.getProfileTable(req).update(
    objmatch, 
    objunset,
    {multi: true}, function(err) {
        coremodels.getProfileTable(req).update(
                        objmatch, 
                        objpull,
                        {multi: true}, function(err) {
        console.log('COMPLETED');
});
(...)                       

The $unset works fine, but the $pull doesn't seem to be working. The end result of this operation is an empty (Null) item 5.

Any ideas why the $pull is not removing the empty document?

Many thanks in advance.

Rafa Llorente
  • 447
  • 2
  • 8
  • 18

1 Answers1

0

Your updateArray function takes two parameters, but you're passing it three. I don't think you're sending { $pull: {'items' : null} } to the driver at all.

Added:

Once you nullify item 5, your match document no longer matches anything . The second time you cal update, try replacing objmatch with { }, which should just remove any nulls.

paulmelnikow
  • 16,895
  • 8
  • 63
  • 114