第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang在json響應(yīng)中獲取數(shù)組索引值

Golang在json響應(yīng)中獲取數(shù)組索引值

Go
MMTTMM 2021-12-20 16:35:26
所以我對(duì)數(shù)據(jù)庫(mongodb)有一些查詢,它將按值字段對(duì)結(jié)果進(jìn)行排序。all := EValues{}err := con.Find(bson.M{"name": "somename}).Sort("-value").All(&all)這個(gè) Json 輸出看起來像: "values": [    {      "user_name": "guest7485",      "value": 8911,      "value_date": "2016-03-09T14:40:34.512Z"    },    {      "user_name": "guest7485",      "value": 539,      "value_date": "2016-03-07T14:11:05.217Z"    },    {      "user_name": "guest7485",      "value": 221,      "value_date": "2016-03-07T14:11:08.853Z"    },    {      "user_name": "guest7485",      "value": 77,      "value_date": "2016-03-07T14:11:12.377Z"    }  ]在我的 json 響應(yīng)中,我需要為所有結(jié)果添加參數(shù)“位置”,它應(yīng)該基本上等于 1 - 第一個(gè)結(jié)果,2 - 第二個(gè)結(jié)果等等。所以我的最終輸出應(yīng)該是: "values": [    {      "position": 1,      "user_name": "guest7485",      "value": 8911,      "value_date": "2016-03-09T14:40:34.512Z"    },    {      "position": 2,      "user_name": "guest7485",      "value": 539,      "value_date": "2016-03-07T14:11:05.217Z"    },    {      "position": 3,      "user_name": "guest7485",      "value": 221,      "value_date": "2016-03-07T14:11:08.853Z"    },    {      "position": 4,      "user_name": "guest7485",      "value": 77,      "value_date": "2016-03-07T14:11:12.377Z"    }  ]我想知道如何用 mgo 來解決這個(gè)問題,并且一般來說,如果有人能給我最有效的方法來解決這個(gè)問題,我會(huì)非常高興。更新:Evalues 的定義如下:type EValue struct {    ID bson.ObjectId `json:"-" bson:"_id,omitempty"`    Name string             `json:"-" bson:"name"`    UserId    bson.ObjectId `json:"-" bson:"userId"`    UserName  string        `json:"user_name" bson:"userName"`    Value     int64         `json:"value" bson:"value"`    AddedTime time.Time     `json:"value_date" bson:"addedTime"`}type EValues []EValue
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

在 MongDB 3.2 中,這可以使用$unwind運(yùn)算符來完成,您可以在其中傳遞帶有字段path和includeArrayIndex將保存數(shù)組索引的字段的對(duì)象:


pipeline = [

    { "$match": {"name": "somename"} },

    { "$unwind": { "path": "$values", "includeArrayIndex": "position" } },

    {

        "$project": {

            "name": 1,

            "newarray.position": "$position",

            "newarray.user_name": "$values.user_name",

            "newarray.value_date": "$values.value_date",

            "newarray.value": "$values.value",

        }

    },

    {

        "$group": {

            "_id": "$name",

            "values": { "$push": "$newarray" }

        }

    }    

]

db.test.aggregate(pipeline);

輸出


> db.test.aggregate(pipeline).pretty();

{

        "_id" : "somename",

        "values" : [

                {

                        "position" : NumberLong(0),

                        "user_name" : "guest8911",

                        "value_date" : "2016-03-09T14:40:34.512Z",

                        "value" : 8911

                },

                {

                        "position" : NumberLong(1),

                        "user_name" : "guest7485",

                        "value_date" : "2016-03-07T14:11:05.217Z",

                        "value" : 539

                },

                {

                        "position" : NumberLong(2),

                        "user_name" : "guest7485",

                        "value_date" : "2016-03-07T14:11:08.853Z",

                        "value" : 221

                },

                {

                        "position" : NumberLong(3),

                        "user_name" : "guest7485",

                        "value_date" : "2016-03-07T14:11:12.377Z",

                        "value" : 77

                }

        ]

}

>

如果 mgo 驅(qū)動(dòng)程序不支持此功能,那么為此使用 Map-Reduce 是一種不太有效的方法。以下 mongo shell 示例演示了如何運(yùn)行該操作:


填充測(cè)試集合:


db.test.insert({ 

    "name": "somename", 

    "values": [

        {

          "user_name": "guest8911",

          "value": 8911,

          "value_date": "2016-03-09T14:40:34.512Z"

        },

        {

          "user_name": "guest7485",

          "value": 539,

          "value_date": "2016-03-07T14:11:05.217Z"

        },

        {

          "user_name": "guest7485",

          "value": 221,

          "value_date": "2016-03-07T14:11:08.853Z"

        },

        {

          "user_name": "guest7485",

          "value": 77,

          "value_date": "2016-03-07T14:11:12.377Z"

        }

      ]

})

運(yùn)行以下 map-reduce 操作:


> mr = db.runCommand({

    "mapreduce": "test",

    "map": function() {

        var arr = []

        for(var i=0; i < this.values.length; i++){

            var val = this.values[i];

            val["position"] = i+1;

            arr.push(val);

        }

        emit(this._id, arr);

    },

    "reduce" : function() {}, 

    "out": "test_keys"

})

查詢結(jié)果集合:


> db[mr.result].find().pretty()

{

        "_id" : ObjectId("56e18ab84b9018ec86d2a6bd"),

        "value" : [

                {

                        "user_name" : "guest8911",

                        "value" : 8911,

                        "value_date" : "2016-03-09T14:40:34.512Z",

                        "position" : 1

                },

                {

                        "user_name" : "guest7485",

                        "value" : 539,

                        "value_date" : "2016-03-07T14:11:05.217Z",

                        "position" : 2

                },

                {

                        "user_name" : "guest7485",

                        "value" : 221,

                        "value_date" : "2016-03-07T14:11:08.853Z",

                        "position" : 3

                },

                {

                        "user_name" : "guest7485",

                        "value" : 77,

                        "value_date" : "2016-03-07T14:11:12.377Z",

                        "position" : 4

                }

        ]

}

>

現(xiàn)在給出上面的清單,您可以使用 MapReduce 在 mgo 中組裝您的查詢


job := mgo.MapReduce{

      Map:    "function(){var arr=[];for(var i=0;i<this.values.length; i++){var val=this.values[i];val['position']=i+1;arr.push(val);};emit(this._id,arr);}",

      Reduce: "function() { }",

  }

  var result []struct { Id int "_id"; Value []EValue }

  _, err := collection.Find(nil).MapReduce(job, &result)

  if err != nil {

      panic(err)

  }

  for _, item := range result {

      fmt.Println(item.Value)

  }

有關(guān)更多詳細(xì)信息,請(qǐng)查看文檔:https : //godoc.org/labix.org/v1/mgo#MapReduce:


查看完整回答
反對(duì) 回復(fù) 2021-12-20
?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

向 EValue 添加位置字段:


type EValue struct {

    ... other fields here

    Position int `json:"position" bson:"-"`

}

循環(huán)遍歷數(shù)據(jù)庫結(jié)果并設(shè)置字段:


for i := range all {

    all[i].Position = i + 1

}

將結(jié)果編組為 JSON。


查看完整回答
反對(duì) 回復(fù) 2021-12-20
  • 2 回答
  • 0 關(guān)注
  • 209 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)