使用Javascript在mongo中的数组indexOf

时间:2016-04-21 03:23:02

标签: javascript arrays

我在脚本中有一个mongodb外的数组,名为 title 。而且,我有一个数据集,其中包含一些我不想在mongodb中(Dataset_1)的字段。 我正在为匹配值创建一个if indexOf以创建排名。

Dataset_1 看起来像这样。

geotype    state            numbers    
state      Alabama          14
state      Alaska           344
state      California       144
state      New York         255
state      Washington       233
state      Guam             255
state      Puerto Rico      36
state      Virgin Islands   366
state      Delaware         434
state      New Mexico       444
state      Maryland         544
...

var title 看起来像这样

var title = [            
'Alabama',         
'Alaska',           
'California',       
'New York',         
'Washington',       
'Delaware',         
'New Mexico',       
'Maryland'
...]         

如果您注意到 var title ,则只有美国州不是该地区。

我的最终目标是按照“数字”对州进行排名。如果与标题数组匹配,则在新列'排名' 中。如果没有匹配,我不希望它被排名。例如,我不希望关岛和波多黎各排名。

if (Dataset_1[column].indexOf(title) > -1) {
    execute 
}

这是我使用mongodb数据集更新的排名JS代码。

//This is my script which also contains var title.
var rank = 0;
var rank_value = Infinity;
db.Dataset_1.find({'geo_type': 'state'}).sort({'numbers': -1}).forEach(function(doc){
    if (doc['state'].indexOf(title) > -1) { 

    if (doc['numbers'] < rank_value) {
        rank_value = doc['numbers']; 
        rank = rank + 1;
    }
    if (doc['numbers'] != null) {
        db.Dataset_1.update({
            '_id' : doc['_id']
        },{$set: {
            'ranking' : rank
        }})
    }
    }
});

此代码对所有字段进行排名,而不考虑我设置的indexOf。我正确地做了indexOf函数吗?

我尝试了很多不同的方法。我得到语法错误或不需要的字段。

总结一下这是一个示例输出。

geotype    state     numbers    ranking
state      Alabama   14         11
state      Alaska    344        5
...

1 个答案:

答案 0 :(得分:1)

问题在于:

if (Dataset1.indexOf(title > -1)) {
    execute 
}

应该是:if(Dataset1.indexOf(title) > -1)

修改

您想检查状态是否在标题列表中,然后您需要:

if(title.indexOf(doc['state']) > -1)

而不是

if (Dataset1.indexOf(title) > -1)