Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何在mongdb中自定义数组_Mongodb - Fatal编程技术网

Mongodb 如何在mongdb中自定义数组

Mongodb 如何在mongdb中自定义数组,mongodb,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

我在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
            }, 
我该怎么办呢?

你就这样试试

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

你可以试试下面的聚合

使用
$arrayElemAt
$project
第一个和最后一个
时间
值,然后是另一个
$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"}}
}}])

使用$unwind运算符解构数组是否要更改架构或需要“时间”:{“开始”:第一个日期,“结束”:最后一个日期}从数据库中提取时我需要它从数据库中提取时这不是我需要的。它仅根据_id分隔时间字段。太棒了,非常感谢