MongoDB中的JSON结构数据操作

时间:2015-07-14 16:32:55

标签: mongodb mongodb-query aggregation-framework apache-drill

我是mongodb的新手,面临数据结构的问题。数据的层次结构不可见。例如,我的数据格式为

{
        "FCILTY_ID" : 154,
        "ACCT_NO" : 2.14782e+008,
        "STRING_DC_CD" : 8,
        "STRING_DTS" : "25-JAN-14",
        "STRING_ID_NO" : 1,
        "STRING_ITEM_NO" : 0,
        "CHILD_OF_CD" : "",
        "BINTYPE_NO" : 244,
        "PTXT_CODE_STR" : "8.1.71.4.0.0.0.13",
        "PTXT_DESC_TXT" : "DC DATE =",
        "VALUE_NO" : 2.37024e+007,
        "VALUE_FREETEXT_TXT" : "",
        "VALUE_DTS" : "25-JAN-14" 
}
 {
     "FCILTY_ID" : 154,
    "ACCT_NO" : 2.14782e+008,
    "STRING_DC_CD" : 8,
    "STRING_DTS" : "25-JAN-14",
    "STRING_ID_NO" : 1,
    "STRING_ITEM_NO" : 2,
    "CHILD_OF_CD" : "",
    "BINTYPE_NO" : 244,
    "PTXT_CODE_STR" : "8.1.71.4.0.0.0.167",
    "PTXT_DESC_TXT" : "START TIME",
    "VALUE_NO" : 2.37024e+007,
    "VALUE_FREETEXT_TXT" : "",
    "VALUE_DTS" : "25-JAN-14"
}
 {
    "FCILTY_ID" : 154,
    "ACCT_NO" : 2.14782e+008,
    "STRING_DC_CD" : 8,
    "STRING_DTS" : "25-JAN-14",
    "STRING_ID_NO" : 1,
    "STRING_ITEM_NO" : 3,
    "CHILD_OF_CD" : "",
    "BINTYPE_NO" : 241,
    "PTXT_CODE_STR" : "8.1.71.4.0.0.0.153",
    "PTXT_DESC_TXT" : "ORDER TYPE",
    "VALUE_NO" : 0,
    "VALUE_FREETEXT_TXT" : "",
    "VALUE_DTS" : ""
}

我正在努力但却无法使用聚合和更新来使数据处于理想结构中。我想拥有像

这样的数据结构
    {
     "FCILTY_ID" : 154,
        "ACCT_NO" : 2.14782e+008,
        "STRING_DC_CD" : 8,
        "STRING_DTS" : "25-JAN-14",
        "STRING_ID_NO" : 1,

        "ITEM":
[ {

    {"STRING_ITEM_NO" : 0,
        "CHILD_OF_CD" : "",
        "BINTYPE_NO" : 244,
        "PTXT_CODE_STR" : "8.1.71.4.0.0.0.13",
        "PTXT_DESC_TXT" : "DC DATE =",
        "VALUE_NO" : 2.37024e+007,
        "VALUE_FREETEXT_TXT" : "",
        "VALUE_DTS" : "25-JAN-14"}

    {
    "STRING_ITEM_NO" : 2,
        "CHILD_OF_CD" : "",
        "BINTYPE_NO" : 244,
        "PTXT_CODE_STR" : "8.1.71.4.0.0.0.167",
        "PTXT_DESC_TXT" : "START TIME",
        "VALUE_NO" : 2.37024e+007,
        "VALUE_FREETEXT_TXT" : "",
        "VALUE_DTS" : "25-JAN-14"}

    {
    "STRING_ITEM_NO" : 3,
        "CHILD_OF_CD" : "",
        "BINTYPE_NO" : 241,
        "PTXT_CODE_STR" : "8.1.71.4.0.0.0.153",
        "PTXT_DESC_TXT" : "ORDER TYPE",
        "VALUE_NO" : 0,
        "VALUE_FREETEXT_TXT" : "",
        "VALUE_DTS" : ""}
    }

]    }

这在mongodb中可行吗?如果没有,我可以使用任何其他工具来实现这一目标。我想在apache drill中插入数据,但在此之前我希望数据结构处于适当的层次结构中。提前谢谢!

1 个答案:

答案 0 :(得分:0)

使用mongo aggregation framework获取结果。

1>第一组FCILTY_ID,ACCT_NO,STRING_DC_CD,STRING_DTS,STRING_ID_NO

2 - ;将所有剩余数据推送到ITEM

3>上次使用的项目。

所以mongo聚合查询看起来像:

db.collectionName.aggregate([
    {
        "$group": {
            "_id": {
                "FCILTY_ID": "$FCILTY_ID",
                "ACCT_NO": "$ACCT_NO",
                "STRING_DC_CD": "$STRING_DC_CD",
                "STRING_DTS": "$STRING_DTS",
                "STRING_ID_NO": "$STRING_ID_NO"
            },
            "ITEM": {
                "$push": {
                    "STRING_ITEM_NO": "$STRING_ITEM_NO",
                    "CHILD_OF_CD": "$CHILD_OF_CD",
                    "BINTYPE_NO": "$BINTYPE_NO",
                    "PTXT_CODE_STR": "$PTXT_CODE_STR",
                    "PTXT_DESC_TXT": "$PTXT_DESC_TXT",
                    "VALUE_NO": "$VALUE_NO",
                    "VALUE_FREETEXT_TXT": "$VALUE_FREETEXT_TXT",
                    "VALUE_DTS": "$VALUE_DTS"
                }
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "FCILTY_ID": "$_id.FCILTY_ID",
            "ACCT_NO": "$_id.ACCT_NO",
            "STRING_DC_CD": "$_id.STRING_DC_CD",
            "STRING_DTS": "$_id.STRING_DTS",
            "STRING_ID_NO": "$_id.sid",
            "ITEM": 1
        }
    }
]).pretty()

如果您想在新收藏中添加上述结果,请在汇总中添加 $out