Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring data mongodb将位置运算符从"$“未设置”;更新查询部分_Java_Spring_Spring Data Mongodb - Fatal编程技术网

Java Spring data mongodb将位置运算符从"$“未设置”;更新查询部分

Java Spring data mongodb将位置运算符从"$“未设置”;更新查询部分,java,spring,spring-data-mongodb,Java,Spring,Spring Data Mongodb,我有一组用户: > db.users.find().pretty() { "_id" : ObjectId("544ab933e4b099c3cfb62e12"), "token" : "8c9f8cf4-1689-48ab-bf53-ee071a377f60", "categories" : [ DBRef("cue_categories", ObjectId("544ab933e4b099c3cfb62e1

我有一组用户:

> db.users.find().pretty()
{
        "_id" : ObjectId("544ab933e4b099c3cfb62e12"),
        "token" : "8c9f8cf4-1689-48ab-bf53-ee071a377f60",
        "categories" : [
                DBRef("cue_categories", ObjectId("544ab933e4b099c3cfb62e10")),
                DBRef("cue_categories", ObjectId("544ab933e4b099c3cfb62e11"))
        ]
}
我想找到所有拥有(比方说)
ObjectId(“544ab933e4b099c3cfb62e10”)
类别的用户,并将其删除(因为该类别已被删除,我不希望用户再引用它)

以JSON格式执行此操作的有效查询为:

db.users.update({  
    categories:{  
        $in:[  
            DBRef("cue_categories", ObjectId("544ab933e4b099c3cfb62e10"))
        ]
    }
},
{
    $unset:{
        "categories.$":true
    }
})
下面是一个Spring mongodb查询:

Query Query=new Query();
(categoryId)中的query.addCriteria(Criteria.where(“categories.id”));
更新=新更新();
update.unset(“categories.$”);
updateMulti(查询、更新、用户类);
为了进行适当的DB引用,我必须提供一个类别ID列表,每个类别ID(在
categoryID
中)都是
org.bson.types.ObjectId
的一个实例

问题是结果查询没有位置运算符:

调试o.s.data.mongodb.core.MongoTemplate-使用调用更新 查询:{“categories.$id”:{“$in”:[{“$oid”: 544ab933e4b099c3cfb62e10“}]}和更新:{“$unset”:{“类别” :1}}在集合中:用户

因此,更新部分必须是
{“$unset”:{“categories.$”:1}

p.S. 我回到了普通Java驱动程序的使用上,成功地摆脱了这一困境

DBObject query=newBasicDBObject(“categories.$id”,newBasicDBObject(“$in”,categoryId));
DBObject update=newBasicDBObject($unset),newBasicDBObject(“categories.$”,true));
operations.getCollection(“用户”).updateMulti(查询、更新);
但我的问题仍然悬而未决

p.S.S.
我的案例与bug非常相似,看起来它是针对1.4.11.5版本修复的。就是说我用的。我很困惑。有人有线索吗?

这看起来更像是一个bug报告。我建议将其归档在春季JIRA上。此版本已归档。@ChristophStrobl mory thxhey@dVaffection会处理此问题,以防您想尝试一下。@ChristophStrobl据我所知,它现在位于主分支中。我怎么能试试?注意,我使用Gradle和