mongoTemplate集約クラスで$ setIsSubsetを使用しようとしています。しかし、解決策を見つけることができませんでした。
私モンゴクエリは次のとおりです。
db.events.aggregate([
{ $match: { $and: [
{ "event_state" : {$in : ["live","scheduled"]} },
{ "schedule.end_time" : {$gt : ISODate("2016-12-12T06:30:00.000Z")} }
]
}
},
{$project:
{
"name" :1,
"category" :1,
"schedule":1,
"celebrity" :1,
"online_moderator" :1,
"offline_moderator" :1,
"region" :1,
"status" :1,
"event_state" :1,
"recorder_id" :1,
"webcast_url":1,
"replay_url":1,
"registered_users":1,
registeredUsers: { $size:"$registered_users" },
is_registered:
{ $setIsSubset: [[ObjectId("584e6253e17ed10f0a8cba1d"),ObjectId("583e9719e17e8c1bf80da2fe")], "$registered_users.user_id"]}
}
},
{ $sort : {
"schedule.start_time": 1
}
}
]);
私は以下のようなコードのほとんどを変換しています。しかし、$ setIsSubset条件で打ちました。
matchCondition = Aggregation.match(Criteria.where("event_state")
.in(listEventStates).and("schedule.end_time").gt(d));
AggregationOperation projectValues = Aggregation.project()
.and("registered_users").size().as("registered_users_count")
.and("name").as("name").and("category").as("category")
.and("schedule").as("schedule").and("online_moderator")
.as("online_moderator").and("offline_moderator")
.as("offline_moderator").and("region").as("region")
.and("status").as("status").and("event_state")
.as("event_state").and("recorder_id").as("recorder_id")
.and("webcast_url").as("webcast_url").and("replay_url")
.as("replay_url");
sortCondition = Aggregation.sort(Sort.Direction.ASC,
"schedule.start_time");
Aggregation aggrigation = Aggregation.newAggregation(matchCondition,
sortCondition, projectValues);
ありがとう@Sagar Reddy。あなたのソリューションはうまくいきました(ラムダ式ではありません)。しかし、小さな修正が必要です。つまり、setIsSubset演算子 "$ setIsSubset"ではなく、 "$$ setIsSubset"ではなく、$ setIsSubset演算子には$が1つだけ存在する必要があります。また、依存性に関する注釈(1.8.5)もありがとう。鉱山は1.8.0だった。だから私はそれに応じて変更しました。 – Kiran