2015-05-11 23 views
1

我需要删除一个数组,这是在另一个,发现只有查询的删除数组元素(没有他在另一个)。

如何删除数组中的特定元素(ID)该数组中的内容是什么?我的查询有什么问题我得到错误?

有更好的方法来解决这个问题吗?而不在阵列内的阵列如何在mongoDB中删除数组中的数组?

文献

{ 
    "_id" : "8d127e9ca7178f900dc4953725188da9", 
    "dataCriacao" : "2015-05-11T09:10:56.251-0300", 
    "pecas" : [ 
     { 
      "id" : "49919187a3c4871923dcda506eef5f73", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_SuperBanner_-.swf", 
      "imagem" : null, 
      "comentarios" : [ 
       { 
        "id" : "c1c586be8ded3d044f96fccc18473cf8", 
        "comentario" : "teste comentario", 
        "horario" : "2015-05-11T09:11:55.399-0300" 
       }, 
       { 
        "id" : "dfc10dc2029ad93cf9585a3ecb3ebe51", 
        "comentario" : "teste comentario", 
        "horario" : "2015-05-11T09:11:55.418-0300" 
       }, 
       { 
        "id" : "3ef39b18f6d7dc45d6d6f7ccb27a2e10", 
        "comentario" : "teste comentario2", 
        "horario" : "2015-05-11T09:12:11.124-0300" 
       }, 
       { 
        "id" : "72b88be895da0b9b7f66c7be55d3ae3b", 
        "comentario" : "teste comentario2", 
        "horario" : "2015-05-11T09:12:11.140-0300" 
       } 
      ] 
     }, 
     { 
      "id" : "b22b488ed7302995fa2971d69f425516", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_Positivo_DeskMedia_Widget_-.jpg", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_DeskMedia_Widget_-.jpg", 
      "imagem" : null 
     }, 
     { 
      "id" : "846bf4984f533b46de83b0fea1b1e06d", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_BuscaDescontos_Homepage_Cupom_-.jpg", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_BuscaDescontos_Homepage_Cupom_-.jpg", 
      "imagem" : null 
     }, 
     { 
      "id" : "5574d989005d89f9181ae1d4acffd7b3", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_BuscaDescontos_Homepage_SuperBanner_-.swf", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_BuscaDescontos_Homepage_SuperBanner_-.swf", 
      "imagem" : null 
     }, 
     { 
      "id" : "3cddcc834c466e945fe5a97ecb75cbf3", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_Positivo_DeskMedia_Widget.jpg", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_DeskMedia_Widget.jpg", 
      "imagem" : null 
     }, 
     { 
      "id" : "cebfef8ed985551560cfd72ac72535dd", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_Zoom_Newsletter_Destaque_-.jpg", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Zoom_Newsletter_Destaque_-.jpg", 
      "imagem" : null 
     }, 
     { 
      "id" : "60a64c5154c79379a6c1c6cb1685ead6", 
      "path" : null, 
      "nome" : "Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_Retangulo_-.swf", 
      "pathOriginal" : "1401 Pecas Midia Grafica_v2/Whirlpool_LinhaBranca_Positivo_CanaisdeAfinidade_Retangulo_-.swf", 
      "imagem" : null 
     } 
    ], 
    "validacaoId" : "55509b6dccf2d4a2f3545fcb", 
    "email" : "[email protected]", 
    "instancia" : "sofist", 
    "tipo" : "3" 
} 

查询1

db.getCollection('validacao_permalinks').update(
    {_id: "8d127e9ca7178f900dc4953725188da9"}, 
    { 
     $pull: { "pecas.comentarios": { 
      $elemMatch: {id:"c1c586be8ded3d044f96fccc18473cf8"} 
      } 
     } 
    } 
) 

错误

cannot use the part (pecas of pecas.comentarios) to traverse the element 

回答

5

下面是解试试这个,

db.getCollection('validacao_permalinks').update(
    {'pecas.comentarios.id': "c1c586be8ded3d044f96fccc18473cf8"}, 
    { 
     $pull: { 'pecas.$.comentarios': { 
      "id":"c1c586be8ded3d044f96fccc18473cf8"}    
     } 
    } 
) 

{'pecas.comentarios.id': "c1c586be8ded3d044f96fccc18473cf8"},将查找文档,

然后$pull将从阵列中删除该文档。

这里是到MongoDB的其他一些引用删除功能

http://docs.mongodb.org/manual/reference/operator/update/pull/

-2

这是我的工作实施例中:

楼层是收集这包括房间的阵列,这个查询删除与指定的ID的 “房间” 对象:

db.floors.update(
    { _id: ObjectId("547dc92e85fca4dc0b0c6f26") }, 
    { 
     $pull: { rooms: { 
      _id: ObjectId("547dc94685fca4dc0b0c6f29") 
      } } 
    }, 
    {upsert:false } 
) 
db.floors.find() 
+1

在哪里工作的例子吗?显示数据填充脚本。 –