node.js - 无法 $pull 形式嵌入对象中的数组

标签 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) {
  });

从电话数组中删除号码的第一个更新有效。

但是第二个应该从“shared.phones”数组中删除号码的方法却没有。

知道我缺少什么吗?

我尝试使用“$”定位运算符,如下所示:

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

但这并没有那么有效。

提前致谢!

最佳答案

正如评论中所说

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

当涉及到嵌套数组时,总是使用 all in one 键,因为 mongodb 不喜欢嵌套超过一层。

关于node.js - 无法 $pull 形式嵌入对象中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458342/

相关文章:

linux - MongoDB 服务无法在 Linux 上的不同用户下启动

mongodb - 如何使用原子操作在一个文档中切换 bool 字段?

mongodb - 使用 Quarkus 进行复杂的 mongodb 查询

javascript - Express 生成器不工作

node.js - 如何使用 async/await 进行正确的错误处理

javascript - 如何在运行时重新加载 ES6 模块?

javascript - 使用 'connection' 关键字连接到 Node JS websocket 时出现问题

javascript - 添加/删除用户后使用 AJAX 刷新列表

node.js - 现有 Nodejs 应用程序上的 Angular2 页面

node.js - page.forEach() 不是函数