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

如何从MongoDB Casbah中的对象数组中删除特定对象,mongodb,scala,casbah,Mongodb,Scala,Casbah,我的数据如下所示:- { "categories": [ { "categoryname": "Eletronics", "categoryId": "89sxop", "displayname": "Eletronics", "subcategories": [ { "subcategoryname": "laptop",

我的数据如下所示:-

    {
    "categories": [
    {
        "categoryname": "Eletronics",
        "categoryId": "89sxop",
        "displayname": "Eletronics",
        "subcategories": [
            {
                "subcategoryname": "laptop",
                "subcategoryId": "454",
                "displayname": "Laptop"
            },
            {
                "subcategoryname": "camera",
                "subcategoryId": "sony123",
                "displayname": "Camera"
            }
        ]
      }
      ]
      }
我想从子类别数组中删除特定对象

我们正在尝试以下代码:-(这是删除类别)

此代码用于删除特定类别

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

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

致意
GSY

您需要使用
$pull
操作符,指定
子类别
数组和用于拾取要删除的元素的条件。
$
操作符可用于选择您感兴趣的特定
类别
元素的
子类别
数组。详情请参见mongo的文档。类似于以下的方法应该可以工作:

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

collection.update(query, removingData)

如果要删除多个子类别,可以使用
$或
运算符指定多个子类别名称s

如果不起作用,我们会遇到如下错误:-类型不匹配找到必需的Imports.DBObjects实际字符串,Import.DBObjects,我们还尝试了另一种方法:-val removingData=$pull(MongoDBObject(“categories.$.subcategories”->MongoDBObject(“SubcategorityName”->“camera”))但是这个查询没有删除mydata…您使用的是什么版本的casbah?我在您粘贴的示例数据上运行了上面的代码,它按照casbah 2.6.3的预期删除了子类别。我所做的唯一更改是更正了“Electronics”的拼写在类别名称中。
{
"categories": [
    {
        "categoryname": "Eletronics",
        "categoryId": "89sxop",
        "displayname": "Eletronics",
        "subcategories": [
            {
                "subcategoryname": "laptop",
                "subcategoryId": "454",
                "displayname": "Laptop"
            }

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

collection.update(query, removingData)