java将查询到的值变成字符串_java – Spring数据mongodb查询自动将String转换为ObjectId...

标题可能不是很清楚,这里是问题所在

我正在以这种形式执行更新:

db.poi.update({

_id: ObjectId("50f40cd052187a491707053b"),

"votes.userid": {

"$ne": "50f5460d5218fe9d1e2c7b4f"

}

},

{

$push: {

votes: {

"userid": "50f5460d5218fe9d1e2c7b4f",

"value": 1

}

},

$inc: { "score":1 }

})

仅在没有具有相同用户标识的文档时才在文档中插入文档(解决方法,因为唯一索引不适用于数组).代码在mongo控制台上工作正常.从我的应用程序我使用这个:

@Override

public void vote(String id, Vote vote) {

Query query = new Query(Criteria.where("_id").is(id).and("votes.userid").ne(vote.getUserid()));

Update update = new Update().inc("score", vote.getValue()).push("votes", vote);

mongoOperations.updateFirst(query, update, Poi.class);

}

如果作为“userid”使用不能成为mongo ObjectId的String,这可以正常工作,但如果我在示例中使用该字符串,则执行的查询会像这样翻译(来自mongosniff):

update flags:0 q:{ _id: ObjectId('50f40cd052187a491707053b'), votes.userid: { $ne: ObjectId('50f5460d5218fe9d1e2c7b4f') } } o:{ $inc: { score: 1 }, $push: { votes: { userid: "50f5460d5218fe9d1e2c7b4f", value: 1 } } }

该字符串现在是一个Objectid.这是一个错误吗? BasicQuery做同样的事情.我看到的唯一其他解决方案是对所有类ID使用ObjectId而不是String.

有什么想法吗?

更新:

这是投票类

public class Vote {

private String userid;

private int value;

}

这是User类

@Document

public class User {

@Id

private String id;

private String username;

}

这是我正在进行此更新的类和mongo文档

@Document

public class MyClass {

@Id

private String id;

@Indexed

private String name;

int score

private Setvotes = new HashSet();

}

作为杰森

{

"_id" : ObjectId("50f40cd052187a491707053b"),

"name" : "Test",

"score" : 12,

"votes" : [

{

"userid" : "50f5460d5218fe9d1e2c7b4f",

"value" : 1

}

]

}

将votes.userid中的Userid推送为String,但将相同的String作为$ne中的ObjectId进行比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值