Javascript 如何在MongoDB中删除数组中的特定对象?

Javascript 如何在MongoDB中删除数组中的特定对象?,javascript,arrays,node.js,mongodb,mongodb-query,Javascript,Arrays,Node.js,Mongodb,Mongodb Query,我的数据库如下所示: _id: 5dd9c43a986f8900178bc588 team: Object project:"5dd6cfb4bc97c65a8759a1d4" team: Array 0: Object name: "Test User 0" role: "Project Lead" 1: Object name: "Test User 1" role: "Secretary" 2

我的数据库如下所示:

_id: 5dd9c43a986f8900178bc588
team: Object
   project:"5dd6cfb4bc97c65a8759a1d4"
   team: Array

    0: Object
       name: "Test User 0"
       role: "Project Lead"

    1: Object
       name: "Test User 1"
       role: "Secretary"

    2: Object
       name: "Test User 2"
       role: "Engineer"
我想根据在前端选择的用户动态删除用户。假设我只想从数据库中删除名为“Test User 1”的对象。。。我正在尝试:

  collection_of_projects.updateOne(
            {'_id': ObjectId(team_db_id)}, 
            { $pull: { "team.team.$.name" : {  'name' : team_mate.name }  } },
        false,
        true 
        )
其中
team\u db\u id
是数据库中的对象id,但我得到了以下错误:

MongoError:位置运算符未从查询中找到所需的匹配项。

它似乎找不到我正在搜索的元素,但我遗漏了什么?请帮忙

UpdateOne()用于更新记录。您可能想使用remove()


我认为您在
{$pull:{“team.team.$.name”:{“name”:team\u mate.name}}
处的查询不正确,您多次嵌套
team
,并且在匹配的部分,即
team\u mate.name
中也不正确。我已经尝试了以下集合
deleteSubDocs
,并且它与
$pull
操作符配合良好,如下所示:

db.deleteSubDocs.update( {_id:ObjectId("5dd9f0670a65bccf463b36ec")}, {$pull: {"team": {"name": "test1"}  }  })
有关查询的详细信息,请浏览官方文档中的示例,您将自动找出查询中的问题

我查找和执行查询的详细信息如下:

> db.deleteSubDocs.find().pretty()
{
    "_id" : ObjectId("5dd9f0670a65bccf463b36ec"),
    "team" : [
        {
            "name" : "KP",
            "role" : "Admin"
        },
        {
            "name" : "test1",
            "role" : "role1"
        },
        {
            "name" : "test2",
            "role" : "role 2"
        }
    ]
}
> 
> db.deleteSubDocs.update( {_id:ObjectId("5dd9f0670a65bccf463b36ec")}, {$pull: {"team": {"name": "test1"}  }  })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.deleteSubDocs.find().pretty()
{
    "_id" : ObjectId("5dd9f0670a65bccf463b36ec"),
    "team" : [
        {
            "name" : "KP",
            "role" : "Admin"
        },
        {
            "name" : "test2",
            "role" : "role 2"
        }
    ]
}
> 

它成功地删除了与
名称
等于
test1
的团队数组值,即使您可以在此数组中进行多次查询

感谢您的建议-我认为removeOne()(remove()已弃用)将删除整个文档。我想保留父对象,但只删除数组中的一个对象。这将删除整个记录。
> db.deleteSubDocs.find().pretty()
{
    "_id" : ObjectId("5dd9f0670a65bccf463b36ec"),
    "team" : [
        {
            "name" : "KP",
            "role" : "Admin"
        },
        {
            "name" : "test1",
            "role" : "role1"
        },
        {
            "name" : "test2",
            "role" : "role 2"
        }
    ]
}
> 
> db.deleteSubDocs.update( {_id:ObjectId("5dd9f0670a65bccf463b36ec")}, {$pull: {"team": {"name": "test1"}  }  })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.deleteSubDocs.find().pretty()
{
    "_id" : ObjectId("5dd9f0670a65bccf463b36ec"),
    "team" : [
        {
            "name" : "KP",
            "role" : "Admin"
        },
        {
            "name" : "test2",
            "role" : "role 2"
        }
    ]
}
>