查询与mongodb中的条件匹配的文档及其所有子文档(使用spring)

我有一个MongoDB,用于存储来自不同传感器的数据。它具有以下结构:

 {

"_id" : 1,

"sensorName" : "Heart Rate",

"samplePeriod" : 1000,

"data" : [

{

"timestamp" : NumberLong("1483537204046"),

"dataPoints" : [ 68 70 ]

},

{

"timestamp" : NumberLong("1483537206046"),

"dataPoints" : [ 68 70 ]

}

]

}

{

"_id" : 2,

"sensorName" : "Ambient Light",

"samplePeriod" : 500,

"data" : [

{

"timestamp" : NumberLong("1483537204058"),

"dataPoints" : [ 56, 54, 54, 54 ]

},

{

"timestamp" : NumberLong("1483537206058"),

"dataPoints" : [ 56, 54, 54, 54 ]

}

]

}

现在,例如,我需要“心率”-包含所有字段和“数据”字段的文档-匹配条件“ 1483537204000和1483537214000之间的时间戳记”的子文档。

我已经在另一个问题中的mongo shell中获得了有关如何执行此操作的答案。参见以下代码:

aggregate([{

$match: {

"_id": 1

}

}, {

"$project": {

"_id": 1,

"sensorName": 1,

"samplePeriod": 1,

"data": {

"$filter": {

"input": "$data",

"as": "result",

"cond": {

$and: [{

$gte: ["$$result.timestamp", 1483537204000]

}, {

$lte: ["$$result.timestamp", 1483537214000]

}]

}

}

}

}

}])

但是如何在java spring-data中做到这一点?似乎在spring-data中没有像$ filter这样的东西。有解决方法吗?

反之,$ filter的效率如何?您能想到在mongodb中构造此类数据的更有效/更实用的方法吗?

提前致谢!

回答:

您需要利用spring mongo数据依赖项中提供的MongoTemplate。当前发行版中没有对$

filter的现成支持。利用AggressionExpression。在项目中包括以下投影。使用1.8.5 Spring mongo数据版本。

Aggregation aggregation = newAggregation(

match(Criteria.where("_id").is(1)),

project( "_id", "sensorName", "samplePeriod").and(new AggregationExpression() {

@Override

public DBObject toDbObject(AggregationOperationContext aggregationOperationContext) {

DBObject filter = new BasicDBObject("input", "$data").append("as", "result").append("cond",

new BasicDBObject("$and", Arrays.<Object> asList(new BasicDBObject("$gte", Arrays.<Object> asList("$$result.timestamp", 1483537204000L)),

new BasicDBObject("$lte", Arrays.<Object> asList("$$result.timestamp", 1483537214000L)))));

return new BasicDBObject("$filter", filter);

}

}).as("data")

);

List<BasicDBObject> dbObjects = monoTemplate.aggregate(aggregation, "collectionname", BasicDBObject.class).getMappedResults();

以上是 查询与mongodb中的条件匹配的文档及其所有子文档(使用spring) 的全部内容, 来源链接: utcz.com/qa/398946.html

回到顶部