2013-12-04 6 views
0

MyData это выглядеть, как показано ниже: -Как удалить конкретный объект из Arrayof объектов в MongoDB Крепости

{ 
    "categories": [ 
    { 
     "categoryname": "Eletronics", 
     "categoryId": "89sxop", 
     "displayname": "Eletronics", 
     "subcategories": [ 
      { 
       "subcategoryname": "laptop", 
       "subcategoryId": "454", 
       "displayname": "Laptop" 
      }, 
      { 
       "subcategoryname": "camera", 
       "subcategoryId": "sony123", 
       "displayname": "Camera" 
      } 
     ] 
     } 
     ] 
     } 

Я хочу, чтобы удалить конкретный объект из Подкатегории массива

мы пытаемся, как показано ниже код :-(Это для удаления категории)

val removingData = $pull(MongoDBObject("categories" -> MongoDBObject("categoryName" -> "Entertainment"))) 

этот код для удаления Отдельная категория.

Но я хочу удалить одну или несколько подкатегорий из определенной категории. подкатегорию (Ex: -i хотите удалить объект из камеры MyData) из категории Электроника

Ожидаемый результат :-(после удаления объекта камеры)

{ 
"categories": [ 
    { 
     "categoryname": "Eletronics", 
     "categoryId": "89sxop", 
     "displayname": "Eletronics", 
     "subcategories": [ 
      { 
       "subcategoryname": "laptop", 
       "subcategoryId": "454", 
       "displayname": "Laptop" 
      } 

     ] 
    } 
] 
} 

С наилучшими пожеланиями GSY

ответ

0

Вам необходимо использовать оператор $pull, указав массив subcategories и условие, используемое для выбора элементов для удаления. Оператор $ может использоваться для выбора массива subcategories конкретного интересующего вас элемента categories. Подробные сведения см. В документах Update Array Operators mongo. Нечто подобное должно работать:

val query = MongoDBObject("categories.categoryname" -> "Electronics") 
val removingData = $pull("categories.$.subcategories" -> MongoDBObject("subcategoryname" -> "camera")) 

collection.update(query, removingData) 

Если вы хотите удалить несколько подкатегорий, вы можете использовать оператор $or указать несколько subcategoryname сек

+0

Привет Конг его не работает, мы получаем ошибку, как показано ниже: - TypeMismatch Найдено Обязательный Импорт.DBObjects фактический String, Import.DBObjects И мы пробовали еще один путь Также: - val removeData = $ pull (MongoDBObject ("категории. $. Подкатегории" -> MongoDBObject ("подкатегория" -> "камера"))), но этот запрос не удаляет mydata ... – sagar

+0

Какую версию casbah вы используете? Я выполнил приведенный выше код на образцах, которые вы вставили, и удалил подкатегорию, как и ожидалось, с помощью casbah 2.6.3. Единственное изменение, которое я сделал, это исправление написания «Электроника» в категории. – kong

+0

ya работает отлично Спасибо .......... Kong – sagar

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

  • Нет связанных вопросов^_^