如何从MongoDB 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")))

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

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

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

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

致以最诚挚的问候GSY

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

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

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