{
"city" : "London",
"eventTime": 1582866000,
"createdTime": 1582900145,
"eventDetails: {
...
}
}
public class Event {
private String city;
private long eventTime;
private long createdTime;
private EventDetails eventDetails;
//getters and setters
}
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("city").is(city)),
Aggregation.match(Criteria.where("eventTime").gte(startTime).lte(endTime)),
Aggregation.group("$$ROOT").max("createdTime").as("createdTime")
);
AggregationResults<Event> groupResults = mongoTemplate.aggregate(aggregation, "collection-name", Event.class);
result = groupResults.getMappedResults();
db.getCollection('collection-name').aggregate([{$group:{_id : "$$ROOT", createdTime : {$max:"$createdTime"}}}])
db.collection.aggregate([
{
$group: {
_id: {
city: "$city",
eventTime: "$eventTime"
},
max: {
$max: "$createdTime"
},
data: {
$push: "$$ROOT"
}
}
},
{
$project: {
max_events: {
$filter: {
input: "$data",
cond: {
$eq: [
"$max",
"$$this.createdTime"
]
}
}
}
}
},
{
$unwind: "$max_events"
},
{
$replaceRoot: {
newRoot: "$max_events"
}
}
])
import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
Aggregation agg = Aggregation.newAggregation(
group("city", "eventTime").max("createdTime").as("max").push("$$ROOT").as("data"),
project().and(new AggregationExpression() {
@Override
public Document toDocument(AggregationOperationContext context) {
return new Document("$filter",
new Document("input", "$data")
.append("cond", new Document("$eq", Arrays.asList("$max", "$$this.createdTime"))));
}
}).as("max_events"),
unwind("max_events"),
replaceRoot("max_events")
);
AggregationResults<Event> events = mongoTemplate.aggregate(agg, mongoTemplate.getCollectionName(Event.class), Event.class);
for(Event ev: events) {
System.out.println(ev);
}
db.collection.aggregate([
{
$group: {
_id: {
city: "$city",
eventTime: "$eventTime"
},
data: {
$push: "$$ROOT"
}
}
},
{
$project: {
closest: {
$reduce: {
input: "$data",
initialValue: {
$arrayElemAt: [
"$data",
0
]
},
in: {
$cond: [
{
$lt: [
{
$abs: {
$subtract: [
"$$this.eventTime",
"$$this.createdTime"
]
}
},
{
$abs: {
$subtract: [
"$$value.eventTime",
"$$value.createdTime"
]
}
}
]
},
"$$this",
"$$value"
]
}
}
}
}
},
{
$unwind: "$closest"
},
{
$replaceRoot: {
newRoot: "$closest"
}
}
])
Aggregation agg = Aggregation.newAggregation(
group("city", "eventTime").push("$$ROOT").as("data"),
project().and(new AggregationExpression() {
@Override
public Document toDocument(AggregationOperationContext context) {
return new Document("$reduce",
new Document("input", "$data")
.append("initialValue", new Document("$arrayElemAt", Arrays.asList("$data", 0)))
.append("in", new Document("$cond", Arrays.asList(
new Document("$lt", Arrays.asList(
new Document("$abs", new Document("$subtract", Arrays.asList("$$this.eventTime", "$$this.createdTime"))),
new Document("$abs", new Document("$subtract", Arrays.asList("$$value.eventTime", "$$value.createdTime"))))),
"$$this",
"$$value"))));
}
}).as("closest"),
unwind("closest"),
replaceRoot("closest")
);
AggregationResults<Event> events = mongoTemplate.aggregate(agg, mongoTemplate.getCollectionName(Event.class), Event.class);
for(Event ev: events) {
System.out.println(ev);
}
我想使用条件查询。 这是我的问题 这是我的java代码 它给出
查询下面的数据时,返回的游标为空。而满足该条件的文档有100个。 使用以下代码 MongoDB驱动程序“go.MongoDB.org/mongo-driver/mongo” 日志写入 日志读取 日志结构 MongoDB数据 状态仅为返回整份8K文档 collection.find()函数是否适合它。 Shell命令正在正确返回文档
问题:有没有办法知道收集中样本文档的实际大小(即oplog)? 我的oplog对于数据来说似乎太小了。我知道哪些查询可能是最大的贡献者,但我想在这样做之前评估一下减少查询的影响。 以下是一些背景: PS:一般来说,每个文档平均250kb似乎太多了,不是吗? 提前谢谢你!
问题内容: 我有两个表,一个表用于新闻,另一个表用于评论,我想获取其状态已设置为批准的评论数。 但是此查询的问题在于,无论是否存在与该新闻相对应的评论,为评论列获取的最小值为1。 任何帮助将是非常可贵的。 问题答案: 使用代替 请尝试以下方法:
问题内容: 我需要按Field1的值对所有记录进行分组,并为每个组计算Field2的最大值。因此,有什么方法可以使最大聚合作用在同一查询中的多个组上? 问题答案: