- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个看起来像这样的 mongodb 集合:
db.scores.insert({"name": "Bob", value: 96.3, timeStamp:'2010-9-27 9:32:00'})
db.scores.insert({"name": "John", value: 98.3, timeStamp:'2010-9-27 9:28:00'})
db.scores.insert({"name": "Bob", value: 99.3, timeStamp:'2010-9-27 9:29:00'})
db.scores.insert({"name": "John", value: 97.3, timeStamp:'2010-9-27 9:31:00'})
我如何查询这个以给我每个名字一次,以及最新的值:
{name: "John", value: 97.3}
{name: "Bob", value: 96.3}
最佳答案
您正在尝试进行数据聚合,因此您必须编写 map-reduce query .
map 函数基本上是 SQL 中的 GROUP BY
子句。在您的情况下,我们将根据名称进行分组,因此我们将使用名称作为 key
。 value
将包含我们需要的其他数据,在本例中为值和时间戳。
map = function () {
emit(this.name, { timeStamp: this.timeStamp, value: this.value });
}
map 函数将为每个键生成一个值数组。所以所有名为“Bob”的文档都映射到键“Bob”。对于您的示例数据,结果可能如下所示:
{ _id: "Bob", values: [
{ timeStamp: "2010-9-27 9:32:00", value: 96.3 },
{ timeStamp: "2010-9-27 9:29:00", value: 99.3 }
]},
{ _id: "John", values: [
{ timeStamp: "2010-9-27 9:28:00", value: 98.3 },
{ timeStamp: "2010-9-27 9:31:00", value: 97.3 }
]},
reduce 函数负责将每个键的值数组缩减为单个值。在您的情况下,我们只对具有最高时间戳的数据感兴趣:
reduce = function (key, values) {
var maxData = { timeStamp: new Date(0) };
values.forEach(function (data) {
if (data.timeStamp > maxData.timeStamp) {
maxData = data;
}
});
return maxData;
}
请注意,reduce 函数的返回值与其接受的值具有相同的格式很重要。这是因为 reduce 函数可能会针对单个键调用多次,每次只接受总值的一部分。
运行 reduce 函数将产生以下结果:
{ _id: "Bob", value: { timeStamp: "2010-9-27 9:32:00", value: 96.3 } },
{ _id: "John", value: { timeStamp: "2010-9-27 9:31:00", value: 97.3 } }
终结器函数可用于仅提取我们需要的数据,即值。
finalize = function (key, value) {
return value.value;
}
这将导致:
{ "_id" : "Bob", "value" : 96.3 },
{ "_id" : "John", "value" : 97.3 }
您可以使用这些函数运行 map-reduce,如下所示:
res = db.scores.mapReduce(map, reduce, { finalize: finalize });
集合 db[res.result]
将包含查询的结果。
reduce 函数比较时间戳为 Date objects .从您的示例代码来看,您已将时间戳存储为字符串,而不是 Date 对象或整数时间戳。因此,在您能够比较日期之前,您必须将这些字符串转换为 Date 对象。
关于mongodb - 获取最近的名字,分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3805370/
古今中外,人其实最珍惜自己的姓名,分量可谓举足轻重,几乎构成一个人最重要的人生价值载体,同理,一个网站的标题也就像网站的名字一样,标题的定性决定着这个网站的路怎么走,SEO的工作将会围绕着这些进行展
我需要强制执行 LASTNAME/FIRSTNAME Something like Smith/John 这种模式。 字符可以是字母数字(小写/大写)也包括特殊字符,如 ë 等。 图案: 基本上规
我有两个字段:first 和 last 我正在尝试使用 multi_match模糊匹配全名: "multi_match": { "query": name, "fields": [
国王i | 王妃i 青梅。 | 竹马。 我要逆天 | 我要爆炸 以前呢i | 后来呢i 抱紧我i | 深吻我i 心悦 | 钟意 依赖 | 共生 阿怪i | 阿乖i 花岛丶 | 草浅丶
我是Delphi的新手。每次运行事物时,都会出现此错误: adoquery1:未找到参数“名字” procedure TForm1.Button1Click(Sender: TObject); beg
我是 Akka 新手,我正在尝试制作一个简单的项目,即有鱼的水族馆。问题是我不知道如何获取我在这一行中声明的 Actor 的名字 final ActorRef fish1 = system.actor
以下是要求:我。如果有名字、中间名和姓氏,则仅显示名字和姓氏二.如果有第一个和最后一个,则显示第一个和最后一个三.如果只有名字,则直接显示 我有以下代码: String fullName = "fir
我使用此 PHP 正则表达式来检查字段是否包含名称(至少包含名字/姓氏,然后是可选的其他中间名或缩写)的 true/false。 $success = preg_match("/([\x{00c0}-
当使用 django allauth 进行社交帐户注册时,allauth 自动将用户名定义为从 3rdparty 获取的 first_name。因此,例如:如果 facebooks John Cucu
我想尝试在 Javascript 中检测一个人名字的不同部分,并将它们剪掉,以便我可以将它们传递给其他东西。 名称可以以任何格式出现——例如:- 维多利亚·米·莱恩小姐 Victoria C J Lo
这是我读过的教程中的查询 CREATE TABLE Employee ( id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, depa
我从包含用户名的文本框中输入了用户输入 输入可以如下所示: var input = "Doe, John M"; 但是,输入可能要复杂得多。像: var input = "Doe Sr, John M
在 Javascript 中,我尝试将全名(名字、中间名和姓氏)输入到字段中,单击提交按钮后将输出到三个单独的字段:字符长度、中间名和 3缩写。到目前为止,我已经到达字符字段,但我对如何获取两个空格之
我尝试通过 java 解析 XML DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder
formatName 方法应该接受名为 name 的字符串,其中包含格式为“First Last”的名称。你可能会认为字符串中只有一个空格。该方法应该创建并返回一个包含名称的字符串格式为“最后,第一个
我是 node.js 的新手。我正在尝试创建一个注册页面并使用 mysql 将输入的值保存在数据库中。 我可以通过在请求 header 上传递参数来做到这一点。但是,在请求 header 中传递参数始
我需要一个函数来根据以下字段检查重复条目:first_name、last_name 和 tel我尝试过浏览论坛,但似乎找不到帮助。 prepare($sql); $stmt->bind_param('
我有下表: First Name Bryce Marcellin Caroline Kerry Roberto Mary Carol Warren Bonnie Terry L
所以我制作了一个代码让用户输入他们的名字和姓氏;然后交换两个位置。 例如。 Bulota Babi 成为 Babi, Bulota 这是我的代码 public class trial { pu
我想知道你是否有两列让我们说 first name. last name. 您在数据库中存储的内容。 您能否在数据库中创建一个“动态”列“全名”,自动根据名字和姓氏创建姓名? firstname
我是一名优秀的程序员,十分优秀!