Java 如何在MongoDb中组合$in和max?
我想从MongoDb历史数据库中获取一组标记的最大时间戳。假设标签ID为1,2,3,4,5,我想检查这些标签的所有记录,并获取最新标签的时间戳。我的收藏与数据如下所示: 我的代码如下:Java 如何在MongoDb中组合$in和max?,java,mongodb,Java,Mongodb,我想从MongoDb历史数据库中获取一组标记的最大时间戳。假设标签ID为1,2,3,4,5,我想检查这些标签的所有记录,并获取最新标签的时间戳。我的收藏与数据如下所示: 我的代码如下: protected Timestamp getMaxRealTimeHistoryTimestamp(List<Integer> tagIds) { try { MongoClient mongo = new MongoClient(m_connectionInfo.
protected Timestamp getMaxRealTimeHistoryTimestamp(List<Integer> tagIds)
{
try
{
MongoClient mongo = new MongoClient(m_connectionInfo.getHost(), m_connectionInfo.getPort());
//Connecting to the database
MongoDatabase database = mongo.getDatabase(m_connectionInfo.getDatabaseName());
BasicDBObject andQuery = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<>();
obj.add(new BasicDBObject("TAG_ID", new BasicDBObject("$in", tagIds)));
MongoCollection<Document> collection = database.getCollection("EM_HISTORY");
Document doc = collection.find(andQuery).sort(new Document("TIME_STAMP", -1)).first();
if(doc != null)
{
return new Timestamp(((Date) doc.get("TIME_STAMP")).getTime());
}
}
catch (Exception e)
{
if (Logger.isErrorEnabled())
Logger.error(e);
}
return null;
}
受保护的时间戳getMaxRealTimeHistoryTimestamp(列表标记ID)
{
尝试
{
MongoClient mongo=新的MongoClient(m_connectionInfo.getHost(),m_connectionInfo.getPort());
//连接到数据库
MongoDatabase database=mongo.getDatabase(m_connectionInfo.getDatabaseName());
BasicDBObject和Query=新的BasicDBObject();
List obj=new ArrayList();
对象添加(新的BasicDBObject(“TAG_ID”,新的BasicDBObject(“$in”,tagid));
MongoCollection collection=database.getCollection(“EM_HISTORY”);
Document doc=collection.find(andQuery).sort(新文档(“时间戳”,-1)).first();
如果(doc!=null)
{
返回新的时间戳(((日期)doc.get(“时间戳”).getTime());
}
}
捕获(例外e)
{
if(Logger.isErrorEnabled())
错误(e);
}
返回null;
}
doc变量有一些奇怪的行,甚至不在集合中 我在这里做错了什么?
BasicDBObject和query=newbasicdbobject();
BasicDBObject andQuery = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<>();
obj.add(new BasicDBObject("TAG_ID", new BasicDBObject("$in", tagIds)));
List obj=new ArrayList();
对象添加(新的BasicDBObject(“TAG_ID”,新的BasicDBObject(“$in”,tagid));
您永远不会将来自
obj
的查询筛选器添加回您的和query
,因此代码最终查询集合时没有任何筛选器。“doc变量有一些奇怪的行,甚至不在集合中”。它不会弥补这个结果,它一定在收藏中。检查\u id:19029
@Thilo已经做了最后一次了\u id是18390。今天没有输入任何数据,因为模拟器没有打开,它仍然有今天的日期。您发布的屏幕截图中的id大于18390。@Thilo抱歉,我想我没有正确排序,但时间值仍然显示错误的值。[{“_id”:19029,“QUALITY”:192,“TAG_id”:578,“TIME_STAMP”:{“$date”:“2021-03-13T18:37:16.358Z”},“VALUE”:0}]时间戳以UTC为单位。我猜时区有问题。由于IST为+5.30,差异仍然太大。您似乎根本没有将过滤器(obj
)添加到您的和查询中。