【发布时间】:2023-03-14 08:15:01
【问题描述】:
我正在使用 mongodb,并且有一个将 cmets 添加为嵌入文档的模型。
如何获取参赛作品的 cmets 平均年龄? (相对示例,我的字段略有不同)
所以我可以有多个 cmets 用于一个条目,我需要找出评论的平均年龄,或平均 :cal_date。对于所有条目/cmets 或每个条目,可以收集其他指标,例如最大 :cal_date...
这有意义吗?需要更多细节?我很高兴有义务得到解决方案。一段时间以来,我一直对日期计算感到困惑。
另一种思考方式是使用图书馆图书模型:有很多书,每本书都有很多借出/借入。我需要找出每本书的平均检出时间和所有书籍的平均检出时间。同样,只是指标,但这些都是日期的事实令人困惑。
{
_id: ObjectId("51b0d94c3f72fb89c9000014"),
barcode: "H-131887",
comments: [
{
_id: ObjectId("51b0d94c3f72fb89c9000015"),
cal_date: ISODate("2013-07-03T16:04:57.893Z"),
cal_date_due: ISODate("2013-07-03T16:04:57.894Z")
},
{
_id: ObjectId("51b0e6053f72fbb27900001b"),
cal_date: ISODate("2012-07-03T19:39:43.074Z"),
cal_date_due: ISODate("2013-07-03T19:39:43.076Z"),
updated_at: ISODate("2013-06-06T19:41:57.770Z"),
created_at: ISODate("2013-06-06T19:41:57.770Z")
}
],
created_at: ISODate("2013-06-06T18:47:40.481Z"),
creator_id: ObjectId("5170547c791e4b1a16000001"),
description: "",
maker: "MITUTOYO",
model: "2046S",
serial: "QEL228",
status: "Out",
updated_at: ISODate("2013-06-07T18:54:38.340Z")
}
还有一件事
如何使用 $push 在输出中包含其他字段?我可以让它工作,但它包括,比如条形码,数组中的两次"barcode" => ["H-131887", "H-131887"]
【问题讨论】:
-
添加书籍内容只会让事情变得混乱 - 你有 cmets 数组,并且你想知道每篇博文中所有 cmets 的平均“年龄” - 似乎很清楚。
-
你能澄清一下你在哪一部分遇到了问题:从 Ruby 运行聚合框架还是在 Ruby 中找出正确的聚合框架管道语法?
-
在您的示例中,哪个字段是“退房”日期?是“cmets.cal_date”吗?哪个是“签到”- cal_date_due 可能是这本书到期的时间,但如果那是过去,它是否设置为归还日期?您需要解释示例文档中的不同字段代表什么,因为如果没有更多信息,您在其中的特定日期对我没有任何意义。
-
map/reduce 不是必需的,因为您没有提到聚合框架无法完成的任何事情,而且聚合框架比 map/reduce 更快(更简单)。
-
如果你想做 $push 但消除重复,你会使用 $addToSet。但是,如果您只是想恢复原始条形码值,而不是创建数组,我建议使用 $first 表达式。我将更新显示此内容的示例解决方案。
标签: ruby-on-rails mongodb date-math