Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在MongoDb中组合$in和max?_Java_Mongodb - Fatal编程技术网

Java 如何在MongoDb中组合$in和max?

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.

我想从MongoDb历史数据库中获取一组标记的最大时间戳。假设标签ID为1,2,3,4,5,我想检查这些标签的所有记录,并获取最新标签的时间戳。我的收藏与数据如下所示:

我的代码如下:

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
)添加到您的
和查询中。