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.1和1.5版本修复的。就是说我用的。我很困惑。有人有线索吗?这看起来更像是一个bug报告。我建议将其归档在春季JIRA上。此版本已归档。@ChristophStrobl mory thxhey@dVaffection会处理此问题,以防您想尝试一下。@ChristophStrobl据我所知,它现在位于主分支中。我怎么能试试?注意,我使用Gradle和