Как сделать запрос из MongoDB, которая является хранилищем отчетов CVE? - PullRequest
0 голосов
/ 18 ноября 2018

Я должен сделать запрос из коллекции mongodb, которая содержит отчеты CVE обо всех программах, как указано в nvd. Очевидно, что с помощью функции поиска я могу запрашивать только первые 20 документов. Есть ли другой возможный способ запроса данных из базы данных на основе названия продукта и поставщика? База данных содержит около 20 000 документов и находится в форме вложенного массива.

<html>
<body background="img/bluebg.jpg">

<?php

$f = $_POST["From"];
$t= $_POST["To"];

<script type="text/javascript">
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/nvd';

var obj = require("C:\MAMP\htdocs\mapping.json");
MongoClient.connect(url, function(err, db) {
  for (i in obj.sector) {
       v=obj.sector[i].Vendor;

    for (j in obj.sector[i].Products) {
      p = obj.sector[i].Products[j];
      console.log(v);
      console.log(p);
      db.general.find( {
                        CVE_Items:{
                            affects:{
                              vendor:{
                                vendor_name:v,
                                  product:{
                                    product_name:p
                                          }
                                      }
                                     }
                                   }                            
                          } )







    // var cursor = db.collection('general').find();
    //
    // cursor.each(function(err, doc) {
    //
    //     console.log(doc);

    //});

  //var obj = require("C:\MAMP\htdocs\mapping.json");

</script>

?>
</br>
<p1><b>VENDOR : </b></p1>
<?php echo $v; ?></br>
<p1><b>PRODUCT : </b></p1>
<?php echo $p; ?></br></br></br></br>

<table>
        <tbody>
            <tr>
                <th>Published</th>
                <th>CWE</th>
                <th>CVE ID</th>
                <th>Modified</th>
                <th>Summary</th>
            </tr>
            <?php foreach ($characters as $character) : ?>
            <tr>
                <td> <?php echo $character->Published; ?> </td>
                <td> <?php echo $character->cwe; ?> </td>
                <td> <?php echo $character->id; ?> </td>
                <td> <?php echo $character->Modified; ?> </td>
                <td> <?php echo $character->summary; ?> </td>
            </tr>
            <?php endforeach; ?>
        </tbody>
</table>
</body>
</html>

Это пример файла json, из которого я сопоставляю каждого поставщика с продуктом, а затем извлекаю cve этого продукта.

{
 "sector" :[
        { "Vendor" : "Microsoft", "Products":["windows_10" , "office" , "word"]},
        { "Vendor" : "Oracle", "Products":["sql_trace_analyzer" , "project_contracts"]},
       ]
}

1 Ответ

0 голосов
/ 18 ноября 2018

Используя функцию поиска, очевидно, я могу запросить только первые 20 документов

Это поведение ожидается, в оболочке Монго курсор возвращается, и онпечатает до первых 20 документов в результатах.Для итеративного доступа к большему количеству документов из курсора вам необходимо использовать it в оболочке mongo.

Есть ли другой возможный способ запроса данных из базы данных на основе названия продукта иvendor?

Предполагая, что имя коллекции cve_reports, вы можете выполнять запросы на основе имени продукта и имени вандора.

db.cve_reports.find({product_name: 'p', vendor:'v'})

При выполнении в оболочке mongo этот запрос вернет курсор ипервые 20 документов будут возвращены, вы можете выполнить итерацию, используя it.

Вы можете получить результат запроса в переменной и выполнить итерацию по нему.

var results = db.cve_reports.find({product_name: 'p', vendor:'v'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...