2015-04-29 3 views
1

У меня есть сводка резюме под названием collectioname, а также список ключевых слов под названием ключевые слова. Я использовал ниже код, чтобы отфильтровать все сводки в collectioname, который содержит первое ключевое слово в списке, и он отлично поработал.Mongodb использовать агрегат для итерации через коллекцию

db.collectioname.aggregate([ { $match: { summary: {$regex: keywords[1], $options:"i"} } }, { $out: "subsetfinal" } ]); 

Но когда я начал его зацикливать, это дало мне ошибку агрегации. Я действительно не могу понять, почему.

for (var i = 0; i < 79; i++) {db.collectioname.aggregate([ { $match: { summary: {$regex: keywords[i], $options:"i"} } }, { $out: "subsetfinal" } ])}; 

он дает мне ошибку:

$ регулярное выражение должно быть строкой
код 16810

Может кто-нибудь помочь?

ответ

1

Вы можете использовать трубы разделителями шаблон регулярного выражения с ключевыми словами, как это:

Контрольные документы:

db.collectioname.insert([ 
    { summary: "a b c" }, 
    { summary: "d e f" }, 
    { summary: "g h i" }, 
    { summary: "j k l" }, 
    { summary: "m n o" } 
]); 

магия:

var keywords = ["a", "d", "j"], 
    regex = keywords.join("|"); 

db.collectioname.aggregate([ 
    { 
     "$match": { 
      "summary": { 
       "$regex": regex, 
       "$options": "i" 
      } 
     } 
    }, 
    { "$out": "subsetfinal" } 
]); 

Запрос:

db.subsetfinal.find({}, {_id:0}) 

дает

/* 0 */ 
{ 
    "summary" : "a b c" 
} 

/* 1 */ 
{ 
    "summary" : "d e f" 
} 

/* 2 */ 
{ 
    "summary" : "j k l" 
} 
+1

Ничего себе, он отлично работает, спасибо человеку – Zeal

+0

@ Zeal Не стоит беспокоиться :-) – chridam

0

Try с Foreach:

keywords.forEach(function(keyword) 
{ 
    db.collectioname.aggregate([ { $match: { summary: {$regex: keyword, $options:"i"} } }, { $out: "subsetfinal" } ]) 
}); 
+0

странно, это дает нулевой вывод, но резюме [1] является 581, я думаю, что агрегат не может работать, как я думаю, что это будет работать , Он перезаписывает нечетные данные, итерация не будет работать с ним. – Zeal

Смежные вопросы