2017-03-02 102 views
0

我米试图建立余米创建页面有用的报表,但我米有与格式化数据的问题,看看下面这样:

db.getCollection('store_spendings').aggregate(
{ 
    "$project": { "spend_dollars": 1, "comments.text": 1, "comments.user.user_id": 1, "store_id": 1 } 
}, 
{ 
    "$lookup": 
    { 
     "from": "corporate_spendings", 
     "localField": "store_id", 
     "foreignField": "store_id", 
     "as": "corporate_spendings" 
    } 
}, 
{ 
    "$match": { "corporate_spendings.region_id": 10816 } 
}, 
{ 
    "$project": { "spend_dollars": "$spend_dollars", "comments": 1, "prior_year_spend_dollars": "$corporate_spendings.prior_year_spend_dollars" } } 
) 

我得到这样的结果:

[ 
    spend_dollars: 321312, 
    comments: [...comments data], 
    prior_year_spend_dollars: [1231231], 
    ... 
] 

我得到的只是数据的格式正确的结果是有点过了prior_year_spend_dollars。我希望它是一个像spend_dollars而不是数组的字段。我试过使用$first但显然它只适用于组。现在我在我的应用中执行这个'第一'操作,但理想情况下它会在db上完成。

我的理想输出,是这样的:

[ 
    spend_dollars: 321312, 
    comments: [...comments data], 
    prior_year_spend_dollars: 1231231, 
    ... 
] 

我怎么能这样做?

+0

公司发送是否总是一个大小为0的数组? – Veeram

+0

@Veeram是的。它总是一对一的映射 –

+0

好吧试试'prior_year_spend_dollars:{“$ arrayElemAt”:[“$ corporate_spendings.prior_year_spend_dollars”,0]}'在项目阶段 – Veeram

回答

1

尝试arrayElemAt运算符在project阶段,它允许您从数组中选择基于索引的值。

"prior_year_spend_dollars": 
{"$arrayElemAt": ["$corporate_spendings. 
prior_year_spend_dollars", 0]} 
+0

谢谢(垫) –