从数组

时间:2015-12-23 09:49:26

标签: node.js mongodb mongoose

我有一个包含球队数组的集合,其中包含一个球员阵列。

我想从播放器阵列中删除。 我想我知道从数组中删除很热,但我不能让它工作。 有一种情况是它从团队数组中删除了所有元素。

这就是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')  }}})

感谢您的帮助, 阿科什

3 个答案:

答案 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数组的整个项目。