2014-01-31 2 views
1

Это моя структура:мне нужно удалить поддокумент в MongoDB

{ 
    "_id" : ObjectId("52ebf3ba71616b871600000c"), 
    "components" : [ 
     { 
      "type" : "text", 
      "text_type" : "subtitle", 
      "pos_x" : 198.384521484375, 
      "pos_y" : 114.43489074707031, 
      "content" : "New subtitle", 
      "font" : "", 
      "font_size" : "", 
      "color" : "", 
      "bold" : false, 
      "italic" : false, 
      "underlined" : false, 
      "rotation" : 0, 
      "scale" : 0, 
      "custom_css" : "", 
      "_id" : ObjectId("52ebf3c171616b871600000d") 
     }, 
     { 
      "type" : "text", 
      "text_type" : "title", 
      "pos_x" : 198.384521484375, 
      "pos_y" : 114.43489074707031, 
      "content" : "New title", 
      "font" : "", 
      "font_size" : "", 
      "color" : "", 
      "bold" : false, 
      "italic" : false, 
      "underlined" : false, 
      "rotation" : 0, 
      "scale" : 0, 
      "custom_css" : "", 
      "_id" : ObjectId("52ebf3c371616b871600000e") 
     }, 
     { 
      "type" : "text", 
      "text_type" : "title", 
      "pos_x" : 279.32373046875, 
      "pos_y" : 265.3794403076172, 
      "content" : "New title", 
      "font" : "", 
      "font_size" : "", 
      "color" : "", 
      "bold" : false, 
      "italic" : false, 
      "underlined" : false, 
      "rotation" : 0, 
      "scale" : 0, 
      "custom_css" : "", 
      "_id" : ObjectId("52ebf44471616b871600000f") 
     }, 
     { 
      "type" : "text", 
      "text_type" : "subtitle", 
      "pos_x" : 55.32373046875, 
      "pos_y" : 35.37944030761719, 
      "content" : "New subtitle", 
      "font" : "", 
      "font_size" : "", 
      "color" : "", 
      "bold" : false, 
      "italic" : false, 
      "underlined" : false, 
      "rotation" : 0, 
      "scale" : 0, 
      "custom_css" : "", 
      "_id" : ObjectId("52ebf44571616b8716000010") 
     }, 
     { 
      "type" : "image", 
      "file" : "", 
      "external_url" : "", 
      "size" : 40, 
      "pos_x" : 0, 
      "pos_y" : 0, 
      "rotation" : 0, 
      "scale" : 0, 
      "custom_css" : "", 
      "_id" : ObjectId("52ebf4d971616b8716000011") 
     } 
    ], 
    "number" : 0, 
    "pos_x" : 0, 
    "pos_y" : 0, 
    "presentation_id" : 46, 
    "rotation_x" : 0, 
    "rotation_y" : 0, 
    "rotation_z" : 0, 
    "scale" : 1 
} 

Мне нужно удалить поддокумент, в данном случае, «компонент», который имеет _id равен «52ebf4d971616b8716000011».

Я пытался с этим:

db.slides.update({"components._id": ObjectId("52ebf4d971616b8716000011")}, 
{$pull: {"components._id": ObjectId("52ebf4d971616b8716000011"}}) 

Но это не работает, документ остается тем же самым.

+0

Забудьте об этом. - спросил я себя. Проблема заключалась в структуре $ pull: db.slides.update ({"components._id": ObjectId ("52ebf4d971616b8716000011")}, {$ pull: {"components": {"_id": ObjectId ("52ebf4d971616b8716000011 ")}}}) – Eduardo

+0

Не могли бы вы опубликовать то, что вы делали, чтобы решить эту проблему? – Aaron

ответ

1

Попробуйте это:

db.slides.update({"components._id": ObjectId("52ebf4d971616b8716000011")}, 
{$pull: {components: {"_id": ObjectId("52ebf4d971616b8716000011")}}}, false, false) 
+0

Перспектива от меня, потому что вы первыми ответили правильно. – Avish

2

Ваша попытка обновления не работает, потому что вы пытаетесь вытянуть из components._id (который не является массивом), вместо того, чтобы вытягивать из components (который является массивом) основанный на _id (который является полем, по которому вы пытаетесь вытащить документы).

Вы должны изменить свой запрос:

db.slides.update(
    { 'components._id': some-id }, 
    { $pull: { components: { _id: some-id } } }); 

, как @ BryceAtNetwork23 предложил.

Смежные вопросы