Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Mongodb 使用mongo同时获取多个项目的最后记录_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 使用mongo同时获取多个项目的最后记录

Mongodb 使用mongo同时获取多个项目的最后记录,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在我的mongo数据库中,我基本上有两个集合: 学生 {_id: ObjectID(539ab7ffefbb93120c9697f7), firstname: 'Arnold', lastname: 'Smith'} {_id: ObjectID(539ab7ffefbb93120c5473c3), firstname: 'Steven', lastname: 'Jens'} 标记 { date: '2014-06-12', value: 12, pupilID: 539ab7ffef

在我的mongo数据库中,我基本上有两个集合:

  • 学生

    {_id: ObjectID(539ab7ffefbb93120c9697f7), firstname: 'Arnold', lastname: 'Smith'}  
    {_id: ObjectID(539ab7ffefbb93120c5473c3), firstname: 'Steven', lastname: 'Jens'}
    
  • 标记

    { date: '2014-06-12', value: 12, pupilID: 539ab7ffefbb93120c9697f7}  
    { date: '2014-06-05', value: 9, pupilID: 539ab7ffefbb93120c9697f7}  
    { date: '2014-05-10', value: 17, pupilID: 539ab7ffefbb93120c9697f7}  
    { date: '2014-05-10', value: 7, pupilID: 539ab7ffefbb93120c5473c3}
    
mongoshell有没有一种方法可以获得每个学生的最后分数,而不必手动循环查看学生列表并获得每个学生的最后分数

目前,我循环检查每个学生并执行以下操作:

db.marks.find({pupilID: pupilID}).sort({_id: -1}).limit(1)

但是,如果marks系列包含大量项目,我非常担心性能。

您的日期不是最好的示例,因为它们是字符串。您应该将它们转换为适当的“日期”类型,但至少它们是用于排序的词汇

不是你似乎在暗中寻找的“加入”,但你可以从你的“分数”集合中获得每个学生的分数,这可能会对你的成绩有所帮助:

db.marks.aggregate([
{“$sort”:{“日期”:1}},
{“$组”:{
“_id”:“$pupilID”,
“日期”:{“$last”:“$date”},
“值”:{“$last”:“$value”}
}}
]}

这将根据每个“pupilID”的日期为您提供最后一个标记“value”。数据的连接取决于您,但这比循环整个集合或以其他方式启动每个“瞳孔”的查询要好。您可以使用
$in
操作符来“列出”瞳孔。可能不是全部,但至少是部分。您甚至没有明确说明“如何”您当前正在这样做。$in将允许获取分数列表,但我如何才能获取每个学生的最后分数?如下所示。比每个学生都这样做要好。我不认为您可能认为,
\u id
实际上是“最后”项。如果是,那么它也可以用于排序。“\u id”:“$pupilID”:“不起作用,我必须更改为“_id”:{“pupilID”:“$pupilID”}。当$last on值出现时,是否有可能返回整个记录(不仅返回值,还返回最后一个标记的数据)?@Luc我只是指你为字段名发布的数据,看起来你的实际数据不同。你可以使用相同的
$last
运算符添加任意多的字段。你需要一个具体的示例吗?它工作正常,谢谢。我只需要修改“\u id”:“$pupilID”