誰でもこれを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