mongodb填充平面文件结果?

时间:2018-07-03 18:58:12

标签: mongodb mongo-shell

我正在尝试从文件系统中删除旧文件
文件列表在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 shell查询数据库

 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 :(得分:2)

您需要使用$concat来连接集合中的任何字段

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

答案 1 :(得分:2)

不要忘记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函数的迭代器,该函数具有与js中的Array.forEach相同的签名。

可以通过其他两种方式来环绕Cursor

  • 手动调用next()直到hasNext()为真。这是Iterable的典型方案。
  • 使用Cursor.toArray()生成一个将所有结果存储到数组中的数组。请注意,因为它们已加载到RAM中。

我在forEach中作为参数输入的lambda函数被解释为成熟的js函数。