获取MongoDB中JSON数组的第n项

获取MongoDB中JSON数组的第n项,json,mongodb,Json,Mongodb,使用MongoDb,如何从下面返回日期和第三个“obs” { "data" : [ { "val" : [ { "obs" : "2/3/2016" }, { "obs" : 41.8599992990494 }, { "obs" : 41.3111999630

使用MongoDb,如何从下面返回日期和第三个“obs”

 {   "data" : [
          {  "val" : [
                    {  "obs" : "2/3/2016"
                    }, 
                    {  "obs" : 41.8599992990494
                    }, 
                    {  "obs" : 41.3111999630928
                    }, 
                    {  "obs" : 5.048
                    }
                ]
            }, 
            {  "val" : [
                    {  "obs" : "2/4/2016"
                    },                
                    {  "obs" : 39.394998550415
                    }, 
                    {  "obs" : 41.8486998975277
                    }, 
                    {  "obs" : NumberInt(0)
                    }
                ]
            }, 
            { "val" : [
                    {  "obs" : "2/5/2016"
                    }, 
                    {  "obs" : NumberInt(0)
                    }, 
                    {  "obs" : 40.2090013027191
                    }, 
                    {  "obs" : 24.2410004138947
                    }, 
                    {  "obs" : 3.629
                    }
                ]
            }
        ]   
    }
从这个开始:

 db.myColl.find({},{"_id":0, "data.val.obs": 1, })
我想:

["2/3/2016", 41.3111], ["2/4/2016", 41.8486]      

以下是如何从V3.4开始在MongoDB中实现这一点

db.getCollection('test').aggregate([
{
$addFields:{
数据:{
$map:{
输入:“$data”,
作为:“项目”,
在:{$concatarray:[{$slice:['$$item.val',1]},{$slice:['$$item.val',2,1]}中
}
}
}
}

]);使用$unwind怎么样??你能把答案包括在内吗$project@Merlin不确定我们是否需要在这里使用$REWIND。例如,我们可以展开“数据”以获得混合在一起的不同记录的过滤val对象。但我看不出有什么特别的理由这么做。关于$project,我将在明天早上添加它。基本上,如果文档不仅具有数据属性,而且还具有例如data_2数组,那么$addFields将使其保持不变。与其他属性相同(如果有)。如果将$addFields替换为$project,则必须手动指定要保留的道具。