mongodb заполнить результаты плоского файла? - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь удалить старые файлы из файловой системы
Список файлов поддерживается в коллекции mongoDb следующим образом:

{
    "_id" : ObjectId("59a39215953f77968789d692"),
    "className" : "com.xerox.model.ModuleDocument",
    "documentId" : "0000001643",
    "documentDate" : ISODate("2017-05-11T04:00:00.000Z"),
    "documentType" : "PRINTER_VALIDATION_2017",
    "module" : "PRINTERS",
    "printerId" : "1002563",
    "origFileName" : "0000001643.JPG",
    "isDeleted" : true
}

Но когда я запрашиваю БД, используя оболочку mongo

 db.getCollection('xerox_documents').find({"isDeleted":true})

Результат отображается как JSON, Можно ли получить результаты в текстовом формате? Желаемый вывод что-то вроде:

DEL c:\DOCS\PRINTERS\PRINTER_VALIDATION_2017\0000001643.JPG  
DEL c:\DOCS\PRINTERS\PRINTER_VALIDATION_2017\0000001643.JPG

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Не забывайте, что скрипт mongodb тесно связан со скриптом js.

db.getCollection('xerox_documents').find({"isDeleted": true}).forEach(elem => {
    print(`DEL c:\\DOCS\\${elem.module}\\${elem.documentType}\\${elem.origFileName}`);
});

Вы можете использовать print() для форматирования результатов в виде необработанного текста. Функция find() возвращает cursor, который является указателем на результат запроса. Думайте об этом как об итераторе, в котором вы можете вызвать функцию forEach, которая имеет ту же сигнатуру, что и Array.forEach в js.

Зацикливание на Cursor можно сделать двумя другими способами:

  • Вручную next(), пока hasNext() не станет правдой. Это типичная схема для Iterable.
  • Использование Cursor.toArray() для генерации массива, в котором все результаты сохраняются в массиве. Остерегайтесь, потому что они загружены в оперативную память.

Лямбда-функция, которую я поставил в качестве аргумента в forEach, интерпретируется как полноценная функция js.

0 голосов
/ 03 июля 2018

Вам нужно использовать $concat для объединения любого поля в коллекции

db.getCollection('xerox_documents').aggregate([
  { "$match": { "isDeleted": true }},
  { "$project": {
    "origFileName": {
      "$concat": [ "c:\DOCS\PRINTERS\PRINTER_VALIDATION_2017\", "$origFileName" ]
    }
  }}
])
...