How to remove array element in mongodb?

2018-12-31 14:40发布

问题:

Here is array structure

contact: {
    phone: [
        {
            number: \"+1786543589455\",
            place: \"New Jersey\",
            createdAt: \"\"
        }
        {
            number: \"+1986543589455\",
            place: \"Houston\",
            createdAt: \"\"
        }

    ]
}

Here I only know the mongo id(_id) and phone number(+1786543589455) and I need to remove that whole corresponding array element from document. i.e zero indexed element in phone array is matched with phone number and need to remove the corresponding array element.

contact: {
    phone: [
        {
            number: \"+1986543589455\",
            place: \"Houston\",
            createdAt: \"\"
        }
    ]
}

I tried with following update method

collection.update(
    { _id: id, \'contact.phone\': \'+1786543589455\' },
    { $unset: { \'contact.phone.$.number\': \'+1786543589455\'} }
);

But it removes number: +1786543589455 from inner array object, not zero indexed element in phone array. Tried with pull also without a success.

How to remove the array element in mongodb?

回答1:

Try the following query:

collection.update(
  { _id: id },
  { $pull: { \'contact.phone\': { number: \'+1786543589455\' } } }
);

It will find document with the given _id and remove the phone +1786543589455 from its contact.phone array.

You can use $unset to unset the value in the array (set it to null), but not to remove it completely.



回答2:

This below code will remove the complete object element from the array, where the phone number is \'+1786543589455\'

db.collection.update(
  { _id: id },
  { $pull: { \'contact\': { number: \'+1786543589455\' } } }
);


回答3:

You can simply use $pull to remove a sub-document. The $pull operator removes from an existing array all instances of a value or values that match a specified condition.

Collection.update({
    _id: parentDocumentId
  }, {
    $pull: {
      subDocument: {
        _id: SubDocumentId
      }
    }
  });

This will find your parent document against given ID and then will remove the element from subDocument which matched the given criteria.

Read more about pull here.



标签: mongodb