2013-12-02 1 views
1

Мои MongoDB данных, глядя, как показано ниже: -как обновить вложенная Arrayof объектов в MongoDB используя Casbah

 { 
     "_id": 1, 
     "categories":[ 
     { 
     "categoryName": "Automobiles", 
     "categoryId": 1, 
     "catDisplayName": "language1", 
     "subCategories": [ 
     { 
      "subCategoryName": "cars", 
      "subCategoryId": 1, 
      "subCatDisplayName": "language2" 
     }, 
     { 
      "subCategoryName": "bykes", 
      "subCategoryId": 2, 
      "subCatDisplayName": "language3" 
     } 

    ] 
}, 
{ 
    "categoryName": "Electronics", 
    "categoryId": 2, 
    "catDisplayName": "somelanguage1", 
    "subCategories": [ 
     { 
      "subCategoryName": "Mobiles", 
      "subCategoryId": 1, 
      "subCatDisplayName": "somelanguage2" 
     }, 
     { 
      "subCategoryName": "cameras", 
      "subCategoryId": 2, 
      "subCatDisplayName": "somelanguage3" 
     } 
     ] 
     } 
     ] 
     } 

Мы пытаемся два случая с MongoDB Крепости следующие случаи: -

  1. если catagory существует, а подкатегория не существует, обновите подкатегорию в подкатегориях Array

  2. Если catagory не существует, а subCategory не существует, обновите категорию и подкатегория в категории и подкатегории массиве Соответственно

Мой случай 1 код выглядит как это он работает нормально

val builderObj = MongoDBObject.newBuilder 
builderObj += "subCategoryName" -> "cycles" 
builderObj += "subCategoryId" -> 3 
builderObj += "subCategoryName" -> "language4" 
builderObj.result() 

val query = MongoDBObject("categories.categoryName" -> "Automobiles") 

val updatingdata = $addToSet("categories.$.subCategories" -> builderObj.result()) 
collection.update(query,updatingdata,true,true) 

Но как писать для случая 2 Мы пытаемся, как показано ниже

val builderObj1 = MongoDBObject.newBuilder 
builderObj1 += "categoryName"-> "Entertainment" 
builderObj1 += "categoryId"-> 3 
builderObj1 += "catDisplayName"-> "somelanguage4" 

val builderObj = MongoDBObject.newBuilder 
builderObj += "subCategoryName" -> "Tickets" 
builderObj += "subCatDisplayName"-> "language1" 
builderObj += "subCategoryId" -> 1 
builderObj.result() 

val query = MongoDBObject("categories.$.categoryName" -> "Entertainment") //Entertainment Category doesn't exist in my data 

val updatingdata = ? // How To Update the Cateroy and SubCategory at a time 
collection.update() 

Пожалуйста, дайте мне Предложения, которые я нахожу здесь

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

ответ

1

Поскольку вы создаете новую категорию, массив subCategories новой категории будет пустым. Таким образом, вы можете просто добавить его в новую категорию напрямую.

val subCatBuilder = MongoDBObject.newBuilder 
subCatBuilder += "subCategoryName" -> "Tickets" 
subCatBuilder += "subCatDisplayName"-> "language1" 
subCatBuilder += "subCategoryId" -> 1 
subCatBuilder 

val catBuilder = MongoDBObject.newBuilder 
catBuilder += "categoryName"-> "Entertainment" 
catBuilder += "categoryId"-> 3 
catBuilder += "catDisplayName"-> "somelanguage4" 
catBuilder += "subCategories" -> MongoDBList(subCatBuilder.result()) 

val query = MongoDBObject() // How do you know which elements of collection to update? 

val updatingdata = $push("categories" -> catBuilder.result()) 

collection.update(query, updatingdata, true, true) 

Конечно, это будет обновлять каждый элемент collection добавить новую категорию. Если вы хотите быть более избирательным, вам необходимо соответствующим образом обновить query.

+0

его работа Спасибо ... Конг – sagar

+0

Привет ..... Конг приведенный выше код работает нормально Но мы хотим удалить подкатегорию (например: -и хотите удалить мобильные телефоны из mydata). Категория электроники Мы пытаемся как ниже код: - val removeData = $ pull (MongoDBObject ("categories" -> MongoDBObject ("categoryName" -> "Entertainment"))) Этот код предназначен для удаления конкретной категории Но как удалить ONE или БОЛЬШЕ подкатегорий из определенной категории. – sagar

+0

Я не уверен, что полностью понимаю, что вы хотите сделать. Возможно, вы могли бы задать отдельный вопрос и немного расширить свое отношение к тому, что вы хотите сделать, и тому, что вы пробовали до сих пор. – kong

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