我的MongoDB数据如下所示: -
{
"_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 Casbah的两个案例,以下案例是: -
如果存在catagory并且subCategory不存在则更新subCategories中的子类别Array
如果catagory不存在且subCategory不存在,则分别更新category和subCategories Array中的category和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
答案 0 :(得分: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
。