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"
}
]
}
>