使用Spring mongoTemplate构造查询以查找数组的元素或更新数组的元素

使用Spring mongoTemplate构造查询以查找数组的元素或更新数组的元素,spring,criteria,mongotemplate,Spring,Criteria,Mongotemplate,任何人都可以将其转换为mongo查询。我尝试过的查询总是产生一些稍有不同的结果,但都失败了 正确结果: db.mailbox.find ( { "user_id" : "2"}, {_id: 0, mails: {$elemMatch: {conversation_id: "3"}}} ); 以下是我尝试过的: Query find = new Query( Criteria.where("user_id").is("2")) .addCriteria(Criteria.whe

任何人都可以将其转换为mongo查询。我尝试过的查询总是产生一些稍有不同的结果,但都失败了

正确结果:

db.mailbox.find
( { "user_id" : "2"}, 
  {_id: 0, mails: 
  {$elemMatch:   {conversation_id: "3"}}}
);
以下是我尝试过的:

Query find = new Query(
Criteria.where("user_id").is("2"))
.addCriteria(Criteria.where("_id").is(0))
.addCriteria(Criteria.where("mails")
.elemMatch(Criteria.where("conversation_id").is("3") ));
结果:

db.mailbox.find({ "user_id" : "2" , "_id" : 0 , "mails" : 
{ "$elemMatch" : { "conversation_id" : "3"}}});
我也尝试过增加未读字段:

db.mailbox.update({"user_id": "2", mails: 
{$elemMatch: {conversation_id: "3"}} , 
{$inc:{"mails.$.unread":1}})

mongoTemplate.findAndModify(
Query.query(Criteria.where("user_id").is("2").and("mails")
.elemMatch(Criteria.where("conversation_id").is("3"))),  new Update()
.inc("mails.$.unread", 1), MailBox.class);
我最后犯了一个错误:

{ "user_id" : "2" , "mails" : { "$elemMatch" : 
{ "conversation_id" : "3"}}} 

fields: null sort: null for class: class MailBox and update: 
{ "$inc" : { "mails.$.unread" : 1}} in collection: mailbox

请你美化一下密码好吗?水平滚动是……中的一个难题:)请你美化一下密码好吗?水平滚动是……中的一个难题:)