我有一个包含球队数组的集合,其中包含一个球员阵列。
我想从播放器阵列中删除。 我想我知道从数组中删除很热,但我不能让它工作。 有一种情况是它从团队数组中删除了所有元素。
这就是doc的样子:
"teams" : [
{
"_guid" : "5c5b3bc0-a957-11e5-b909-b7a1cbe2c8be",
"teamname" : "Ping-Win_team",
"_id" : ObjectId("567a68f6a7c726540b2d746b"),
"players" : [
ObjectId("567a68f6a7c726540b2d7469"),
ObjectId("567a68f7a7c726540b2d746c")
]
}
],
我的试用期:
db.lobbies.update({ _id: ObjectId('567a68f6a7c726540b2d746a') }, { $pull: { 'teams': { 'players.$': ObjectId('567a68f7a7c726540b2d746c') }}})
感谢您的帮助, 阿科什
答案 0 :(得分:0)
将$pull
运算符与更新中的 $
positional operator 一起应用以更改name
字段。 $
positional operator 将标识要更新的数组中的正确元素,而不显式指定元素在数组中的位置,因此最终的更新语句应如下所示:
db.lobbies.update(
{ "teams.players": ObjectId("567a68f7a7c726540b2d746c") },
{
"$pull": {
"teams.$.players": ObjectId("567a68f7a7c726540b2d746c")
}
}
)
答案 1 :(得分:0)
您可以使用以下代码删除嵌套数组中的一个或多个值
db.sessions.update(
{
"teams": {
$elemMatch: {
"players": {$in: [ObjectId("567a68f7a7c726540b2d746c")]}
}
}},
{
"$pull": {
"teams.$.players": {$in:[ObjectId("567a68f7a7c726540b2d746c")]}
}
})
答案 2 :(得分:0)
如果我的问题得到了正确的解答,你就无法拉出其中一个玩家ID,因为:
位置$运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$ placeholder的替换是单个值
来自:https://docs.mongodb.org/v3.0/reference/operator/update/positional/
否则,您将拉出包含该特定播放器的teams数组的整个项目。