mongodb:使用包含文档和子文档的where子句删除子文档

标签 mongodb

这是我的收藏( worker ):

"type" : "Manager",
"employees" : [{
    "name" : "bob"
    "id" : 101
    },{
    "name" : "phil"
    "id" : 102
    },{
    "name" : "bob"
    "id" : 103
    }]

首先:这不是一个数组,因此 $pullAll 将不起作用或其他数组命令。我想要做的就是:(1) 在所有子文档中搜索 id 101 的集合 类型管理器。 (2)如果101存在于"Manager"子文档中,我想删除第103项。

关于这个问题,我已经在网上翻了两天了,还是搞不明白。

我试过这个(以及许多其他变体):

db.workers.update( {"type":"Manager","employees.id":101},{$pull : {"employees.id" : {"id" : 103}}},false,true)

最佳答案

$pull 对象的语法已关闭。试试这个:

db.workers.update({"type":"Manager","employees.id":101},
    {$pull : {"employees" : {"id" : 103}}},false,true)

确认它们已被删除:

db.workers.find({
    type: "Manager", 
    $and: [{'employees.id': 101}, {'employees.id': 103}]
})

关于mongodb:使用包含文档和子文档的where子句删除子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15836948/

相关文章:

mongodb - 如何将 Mongodb cursorTimeoutMillis 设置为 NoT 超时?

mongodb - Go mgo 获取字段类型

mongodb - 如何通过在不断更新的大集合中迭代游标来避免 mongo 返回重复的文档?

mongodb - 如何在 MongoDB 中执行 SQL Join 等效操作?

mongodb - Mongo/Morphia - $text 查询只需要一个文本索引'

mongodb - NestJS - 使用 mongoose 通过枚举嵌入嵌套文档

javascript - Mongoose 中 "SELECT * WHERE city != null"的模拟

mongodb - 配置 Mongo shell 以默认将所有数字存储为整数

node.js - Mongoose 更新嵌套数组

javascript - Mongoose 不会保存大文本