如何在mongdb中自定义数组

时间:2017-03-13 04:36:34

标签: mongodb

我在mongodb中有一个问题。 例如:

"times" : [ 
        {
            "start" : first_date,
            "end" : ISODate("2017-03-10T12:00:00.000Z")
        }, 
        {
            "start" : ISODate("2017-03-10T14:00:00.000Z"),
            "end" : ISODate("2017-03-10T18:10:00.000Z")
        }, 
        {
            "start_time" : ISODate("2017-03-11T08:00:00.000Z"),
            "end" : last_date
        }
    ],

这是最新文档。 我想把这个文件做成那样的

"times" : {
                "start" : first_date,
                "end" : last_date
            }, 

我该怎么办?

2 个答案:

答案 0 :(得分:0)

你尝试这样做..

     db.collection.aggregate([{
            "$unwind": "$times"
         }, {
            $project: {
                _id: 0,
                times: 1
            }
     }])

答案 1 :(得分:0)

您可以尝试以下聚合。

使用$arrayElemAt$project第一个和最后一个times值,然后使用另一个$project来选择开始和结束时间。

db.collection.aggregate([
    {$project:{first:{$arrayElemAt: ["$times", 0]}, 
               last:{$arrayElemAt: ["$times", -1]}}}, 
    {$project:{_id:0, "times.start":"$first.start", "times.end":"$last.end"}}])

您可以使用$let运算符在单个阶段保存$arrayAtElem$project值的结果。

db.collection.aggregate([
   {$project:{"times.start":{$let: {vars: {obj: {$arrayElemAt: ["$times", 0]}},
        in: "$$obj.start"}}, 
             "times.end":{$let: {vars: {obj: {$arrayElemAt: ["$times", -1]}},
        in: "$$obj.end"}}
}}])