【问题标题】:mongodb populate flat file results?mongodb填充平面文件结果?
【发布时间】:2018-07-03 18:58:12
【问题描述】:

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

【问题讨论】:

  • 您能否解释一下...您希望哪个字段为文本格式?
  • 任何领域,如果你能告诉我如何,我可以构建其余的
  • 只需使用forEach 循环遍历结果并使用print 函数来格式化字符串。
  • @MarcoLuzzara 你能提供样品吗?

标签: mongodb mongo-shell


【解决方案1】:

别忘了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 函数。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多