我在脚本中有一个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
...
答案 0 :(得分:1)
问题在于:
if (Dataset1.indexOf(title > -1)) {
execute
}
应该是:if(Dataset1.indexOf(title) > -1)
修改强>:
您想检查状态是否在标题列表中,然后您需要:
if(title.indexOf(doc['state']) > -1)
而不是
if (Dataset1.indexOf(title) > -1)