【发布时间】:2014-09-16 01:10:12
【问题描述】:
我有一个对象数组:
result = [
{ _id: 53d0dfe3c42047c81386df9d, video_id: '1' },
{ _id: 53d0dfe3c42047c81386df9e, video_id: '1' },
{ _id: 53d0dfe3c42047c81386df9f, video_id: '1' },
{ _id: 53d0dfe3c42047c81386dfa0, video_id: '2' },
{ _id: 53d0dfe3c42047c81386dfa1, video_id: '2' },
{ _id: 53d0dfe3c42047c81386dfa2, video_id: '1' },
{ _id: 53d0dfe3c42047c81386dfa3, video_id: '2' },
{ _id: 53d0dfe3c42047c81386dfa4, video_id: '1' }
]
我需要创建另一个数组,以video_id为索引,包含这个video_id在第一个数组中出现的次数:
list = [
{'1' : 5},
{'2' : 4}
]
目前,我使用以下代码:
while (i < result.length)
{
if(list[result[i].video_id] === undefined) {
list[result[i].video_id] = 0;
}
list[result[i].video_id] = list[result[i].video_id] + 1;
i = i + 1;
}
它有效,但我想知道是否有更快更清洁的方法来做到这一点? (实际结果数组有超过 10k 个元素,我怀疑 >10k 条件语句是最优的......)。
我正在使用 node.js,结果来自 mongoose (mongoDB) 查询,我没有看到任何方法可以通过 mongoose 本身完成此操作:
var now = new Date();
//M_logs is a mongoose model
query = M_logs.where('time').gt(new Date(now.getFullYear(), 0, 1).getTime() / 1000).lt(now.getTime() / 1000).select('video_id');
(PS:我想知道这不是代码审查问题,如果我跑题了,请告诉我,以便我可以迁移问题)。
编辑:
回答胡安·卡洛斯·法拉:
S_logs = new mongoose.Schema({
user_ip : String,
user_id : String,
user_agent : String,
canal_id : String,
theme_id : String,
video_id : String,
osef : String,
time : Number,
action: String,
is_newuser : String,
operator : String,
template : String,
catalogue : String,
referer : String,
from : String,
osef1 : String
});
M_logs = mongoose.model('logs', S_logs);
【问题讨论】:
-
M_logs中的文档是什么样的?
-
@JuanCarlosFarah:添加
-
太棒了。刚刚添加了一个答案。
标签: arrays node.js mongodb mongoose