如何从MongoDB Casbah中的对象数组中删除特定对象

时间:2013-12-04 05:27:03

标签: mongodb scala casbah

mydata如下所示: -

    {
    "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")))

此代码用于删除特定类别。

但我想从特定类别中删除一个或多个子类别。 subCategory(例如:-i想从mydata中删除相机对象)来自电子类别

预期输出:-(删除相机对象后)

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

        ]
    }
]
}

最诚挚的问候 GSY

1 个答案:

答案 0 :(得分:0)

您需要使用$pull运算符,指定subcategories数组以及用于选择要删除的元素的条件。 $运算符可用于选择您感兴趣的特定subcategories元素的categories数组。有关详细信息,请参阅mongo的Update Array Operators文档。以下内容应该有效:

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

collection.update(query, removingData)

如果您要删除多个子类别,可以使用$or运算符指定多个subcategoryname s