[英]How to delete a specific object in an array in MongoDB?
我的数据库看起来像这样:
_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_db_id
是数据库中的对象 ID,但我收到此错误:
MongoError: The positional operator did not find the match needed from the query.
似乎找不到我要搜索的元素,但我错过了什么? 请帮忙!
我认为您在{ $pull: { "team.team.$.name" : { 'name' : team_mate.name } } }
的查询不正确,您多次嵌套team
并在匹配部分,即team_mate.name
也不正确。 我已经尝试过下面的集合deleteSubDocs
并且它与$pull
运算符一起工作正常,如下所示:
db.deleteSubDocs.update( {_id:ObjectId("5dd9f0670a65bccf463b36ec")}, {$pull: {"team": {"name": "test1"} } })
有关$pull
详细信息,请查看官方文档中的示例,您将自动找出查询中的问题。
我发现和执行查询的详细信息如下:
> 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"
}
]
}
>
它成功删除了与name
匹配的 team 数组值等于test1
,即使您可以在其中创建多个和查询。
UpdateOne() 用于更新记录。 您可能想使用 remove()。
collection_of_projects.remove(
{'_id': ObjectId(id_of_team_member)})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.