无法$ pull拉入嵌入在对象中的表单数组

时间:2017-11-23 14:58:50

标签: node.js mongodb express mongoose

我的模型看起来像这样:

contacts: {
  phones: [{
    phone_id: {
      type: ObjectId
    },
    phone_number: {
      type: String
    }
  }],
  shared: {
    phones: [{
      phone_id: {
        type: ObjectId
      },
      phone_number: {
        type: String
      },
    }]
  }
}

我有一个端点,我试图删除与我在查询字符串中传递的ID匹配的电话号码。

我的代码如下所示:

  Contacts.update({ 'phones._id': req.params.phone_id }, 
    { "$pull": { "phones": { "_id": req.params.phone_id} }}, 
    { safe: true, multi:true }, function(err, obj) {
  });

  Contacts.update({ 'shared.phones._id': req.params.phone_id }, 
    { "$pull": { "shared.phones": { "_id": req.params.phone_id} }}, 
    { safe: true, multi:true }, function(err, obj) {
  });

从电话阵列中移除号码的第一次更新。

但第二个应该删除“共享电话”中的号码。数组没有。

对我失踪的事情有所了解吗?

我尝试使用' $'像这样定位运算符:

  Contacts.update({ 'shared.phones.$._id': req.params.phone_id }, 
    { "$pull": { "shared.phones.$": { "_id": req.params.phone_id} }}, 
    { safe: true, multi:true }, function(err, obj) {
  });

但这并没有奏效。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如评论中所述

{ $pull: { 'shared.phones._id': req.params.phone_id } }

当谈到嵌套数组时,总是使用all in one keys,因为mongodb不喜欢深入到多个级别。