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