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