javascript - 编写 MongoDB shell 脚本,以干净格式返回 ID

标签 javascript json mongodb

下面的脚本应该从 mongo 返回我想要的值的 CSV,我想要的所有数据都已返回,但两个项目的格式不同,尽我所能,我只能获取值。
问题1:第一个返回的项目“$_id”返回ObjectId(“5a4b7775d9cc09000185b908”),但我只想获取值5a4b7775d9cc09000185b908。每次我尝试解析它或使用 valueOf 时,它都会返回一个空白值。

问题 2: 我请求的第四项应该是使用两个日期值 {$subtract: [ "$finished", "$started"表示某件事花费多长时间的时间格式] }(开始和结束时间)。我返回的是 NumberLong(5844),它应该只是毫秒。

脚本

var cur=db.submissions.aggregate(
[
    {$match: { started: {'$gte': ISODate('2018-01-02 01:01:01.001'), '$lte': ISODate('2018-01-02 13:15:59.999' ) } } },
    {$project: { 
        data: [
    "$_id",
    {$dateToString: { format: "%Y-%m-%d %H:%M:%S", date: "$started" } },
    {$dateToString: { format: "%Y-%m-%d %H:%M:%S", date: "$finished" } },
    {$subtract: [ "$finished", "$started" ] },
    "$inputs.x12InputFile.size"
           ] 
        }
    }
]
)
cur.forEach(function(doc) {print(doc.data)})

当前结果

ObjectId("5a4b7775d9cc09000185b908"),2018-01-02 12:13:42,2018-01-02 12:13:48,NumberLong(5844),5322
ObjectId("5a4b77d530391100017d92df"),2018-01-02 12:15:18,2018-01-02 12:15:26,NumberLong(8593),5178

预期结果

5a4b7775d9cc09000185b908,2018-01-02 12:13:42,2018-01-02 12:13:48,5844,5322
5a4b77d530391100017d92df,2018-01-02 12:15:18,2018-01-02 12:15:26,8593,5178

如有任何帮助,我们将不胜感激。我是编写 mongo 查询脚本的新手,因此如果可能的话,响应中的详细信息/示例会有所帮助。

最佳答案

我不会使用聚合框架来格式化结果。无论如何,您都无法在聚合 Pipeline 中将 ObjectId 转换为字符串。

var cursor = db.submissions.find({started:{'$gte': ISODate('2018-01-02 
01:01:01.001'),'$lte': ISODate('2018-01-02 13:15:59.999' )}},{started : 1, 
finished : 1, "inputs.inputFile.size" : 1});

cursor.forEach( function(doc) { 
    var arr=[];
    arr.push(doc._id.str);
    arr.push(doc.started.toISOString());
    arr.push(doc.finished.toISOString());
    arr.push(doc.finished.getTime() - doc.started.getTime());
    print(arr)
});

关于javascript - 编写 MongoDB shell 脚本,以干净格式返回 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48432789/

相关文章:

MongoDb 数组交集

java - 如何使用 java spring 注释在 MongoDB 中创建完全填充的引用对象

javascript - 修改 php 中的 javascript 代码

javascript - JwtModule.registerAsync 在 NestJS 中不起作用

c# - 使用动态变量解析 JSON block

json - 为什么 Mongoose 不允许我访问 JSON 属性?

mongodb - 旧驱动程序版本与新 mongodb 服务器的兼容性

javascript - SJCL库解密问题

javascript - jQuery - 从索引中获取子项作为 jQuery 对象

java - 从 Java 中的 JSON 数组对象获取字符串值