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 在集合中通过排序获取唯一文档_Java_Mongodb - Fatal编程技术网

Java 在集合中通过排序获取唯一文档

Java 在集合中通过排序获取唯一文档,java,mongodb,Java,Mongodb,我有一个mongo收藏“Student”,里面有以下文件 `{ "_id" : ObjectId("5d006ed8506fe860333c5aa2"), "studentId" : "123", "examName" : "abc", "marks" : 56, "isLatest" : 34343, "examStatus" : "Completed", "addedOn" : ISODate("2019-06-09T07:02:00.

我有一个mongo收藏“Student”,里面有以下文件

`{
    "_id" : ObjectId("5d006ed8506fe860333c5aa2"),
    "studentId" : "123",
    "examName" : "abc",
    "marks" : 56,
    "isLatest" : 34343,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-09T07:02:00.650Z")
}
{
    "_id" : ObjectId("5d006ed8506fe860333cwewew2"),
    "studentId" : "123",
    "examName" : "abc",
    "marks" : 57,
    "isLatest" : 45454,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-10T07:02:00.650Z")
}
{
    "_id" : ObjectId("5d006ed8506fe860333c5aa5"),
    "studentId" : "123",
    "examName" : "def",
    "marks" : 56,
    "isLatest" : 4434,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-10T07:02:00.650Z")
}
{
    "_id" : ObjectId("5d006ed8506fe860333c5aa8"),
    "studentId" : "123",
    "examName" : "def",
    "isLatest" : 1,
    "examStatus" : "Under progress",
    "addedOn" : ISODate("2019-06-11T07:02:00.650Z")
}
{
    "_id" : ObjectId("5d00708a506fe860333c5ad9"),
    "studentId" : "456",
    "examName" : "def",
    "marks" : 56,
    "isLatest" : 1,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-10T07:02:00.650Z")
}`
现在我想在examStatus完成的examName上获取文档的最新唯一数据。例如,对于examName:def,查询应返回以下文档

`{
    "_id" : ObjectId("5d00708a506fe860333c5ad9"),
    "studentId" : "456",
    "examName" : "def",
    "marks" : 56,
    "isLatest" : 1,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-10T07:02:00.650Z")
}`
对于testName abc,它应该返回

`{
    "_id" : ObjectId("5d006ed8506fe860333cwewew2"),
    "studentId" : "123",
    "examName" : "abc",
    "marks" : 57,
    "isLatest" : 45454,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-10T07:02:00.650Z")
}`
如果检查状态为“正在进行”的文档更改为“已完成”,则如下所示

{
    "_id" : ObjectId("5d006ed8506fe860333c5aa8"),
    "studentId" : "123",
    "examName" : "def",
    "marks" : 99,
    "isLatest" : 1,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-11T07:02:00.650Z")
}
然后,examName def和examStatus completed的学生输出应返回我

{
    "_id" : ObjectId("5d00708a506fe860333c5ad9"),
    "studentId" : "456",
    "examName" : "def",
    "marks" : 56,
    "isLatest" : 1,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-10T07:02:00.650Z")
}
{
    "_id" : ObjectId("5d006ed8506fe860333c5aa8"),
    "studentId" : "123",
    "examName" : "def",
    "marks" : 99,
    "isLatest" : 1,
    "examStatus" : "Completed",
    "addedOn" : ISODate("2019-06-11T07:02:00.650Z")
}
到目前为止,我尝试了以下查询

db.getCollection'Student'。聚合[ {$sort:{addedOn:-1}}, {$match:{examName:def}} ]试试这种方法

db.Student.find({examName:"def", examStatus:"Completed"}).sort({addedOn : -1}).limit(1)
否则,要获取最新值,可以按ObjectId排序。之所以可以这样做,是因为ObjectId的4字节值表示自Unix纪元以来的秒数

db.Student.find({examName:"def", examStatus:"Completed"}).sort({_id : -1}).limit(1)
更新

我认为你不能通过一个查询就做到这一点。尝试使用两个查询

var student = db.Student.findOne({examName:"abc", examStatus:"Completed"})
db.Student.find({"addedOn" : {$gte : student.addedOn}, "examName" : {$eq : student.examName}, "examStatus" : {$eq : student.examStatus}});

这将始终只给我一个文档。id为的文档将examstatus从“正在处理”更改为“已完成”,然后输出应该是具有以下id的文档`{{u id:ObjectId5d00708a506fe860333c5ad9}{{u id:ObjectId5d006ed8506fe860333c5aa8}如果需要多个文档,只需删除limit1函数即可。然后它会给出所有相关的文件。然后它会给出所有三个文件,其中两个文件是给学生的。ID:123但对于这一点,我只需要一个带有最新附录的文件。现在我明白你的问题了。我已经编辑了答案。试试看。