注意:Mongo 3.6.2版。
我有一个看起来像这样的文档:
<!DOCTYPE html>
<html>
<head></head>
<body>
<ul id="ulid">
<li>第一个</li>
<li>第二个</li>
<li>第三个</li>
</ul>
<br/>
<input type="button" value="添加" onclick="add1();"/>
</body>
<script type="text/javascript">
function add1(){
var li1 = document.createElement("li").appendChild(document.createTextNode("下一个"))
document.getElementById("ulid").appendChild(li1);
}
</script>
</html>
我想在[[Dep,POR],[14073,99.25],[14072,0.06]]
和Dep,POR,14073,99.25,14072,0.06
上做一个mongodb groupBy,其中event_id =X。所以输出应该像这样:
function get_historical() {
var well = document.getElementById('wellSelect');
var selected_well = well.options[well.selectedIndex].value;
var hist_json_obj = JSON.parse(Get("/get_historical/" + selected_well));
hist_por = ['Dep','POR'];
for (var item in hist_json_obj) {
if (hist_json_obj.hasOwnProperty(item)) {
var dep = hist_json_obj[item].dep;
var por = hist_json_obj[item].por;
var arr_por = [dep, parseFloat(por)];
hist_por.push(arr_por);
}
}
document.write(hist_por);
}
最困难的部分是const Ticket = new mongoose.Schema({
event_id: [
{
required: false,
type: mongoose.Schema.Types.ObjectId,
ref: 'Event'
}
],
ticket_type: String,
createdAt: String,
}, { collection: 'tickets' });
作为timemillis存储在字符串中,例如:
ticket_type
答案应如下所示:
createdAt
任何帮助将不胜感激。谢谢。
这是我想出的:
[{ ticket_type: 'VIP', date: 2011-11-11, count: 12}, {..}]
答案 0 :(得分:1)
您可以使用$group聚合管道阶段。要将字符串转换为数字,您可以使用$toLong运算符,然后可以使用$add(也适用于ISODate)以零毫秒(new Date(0))
将该值添加到日期中,以获取{{ 1}}。试试:
ISODate
编辑:假设您手动将字符串转换为数字,则可以运行以下查询以在ISODate的日期部分进行汇总:
Ticket.aggregate([
{ $match: { event_id: req.params.event_id } },
{
$group: {
_id: {
ticket_type: "$ticket_type",
createdAt: { $add: [ new Date(0), { $toLong: "$createdAt" } ] }
}
}
}
], function(err, tickCount) {
if (err) {
console.log(err);
} else {
res.json(tickCount);
}
});