亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 和 mgo 中使用 mongodb 投影?

如何在 Go 和 mgo 中使用 mongodb 投影?

Go
精慕HU 2021-11-22 16:54:53
我目前正在嘗試在 mongodb 內的文檔數組中提取單個對象。這是一個示例數據集:"_id" : ObjectId("564aae61e0c4e5dddb07343b"),"name" : "The Races","description" : "Horse races","capacity" : 0,"open" : true,"type" : 0,"races" : [    {        "_id" : ObjectId("564ab9097628ba2c6ec54423"),        "race" : {            "distance" : 3000,            "user" : {                "_id" : ObjectId("5648bdbe7628ba189e011b18"),                "status" : 1,                "lastName" : "Miranda",                "firstName" : "Aramys"            }        }    },    {        "_id" : ObjectId("564ab9847628ba2c81f2f34a"),        "bet" : {            "distance" : 3000,            "user" : {                "_id" : ObjectId("5648bdbe7628ba189e011b18"),                "status" : 1,                "lastName" : "Miranda",                "firstName" : "Aramys"            }        }    },{...}]我可以在 mongo 中使用以下內容成功查詢:db.tracks.find({"_id": ObjectId("564aae61e0c4e5dddb07343b")}, {"races": { $elemMatch: {"_id": ObjectId("564ab9847628ba2c81f2f34a")}}}).pretty()我無法使用 mgo 做同樣的事情,并嘗試了以下方法:使用嵌套(拋出:復合文字中缺少類型,地圖文字中缺少鍵)// Using nesting (Throws: missing type in composite literal, missing key in map literal)c.Find(bson.M{{"_id": bson.ObjectIdHex(p.ByName("id"))}, bson.M{"races": bson.M{"$elemMatch": bson.M{"_id": bson.ObjectIdHex(p.ByName("raceId"))}}}}).One(&result)// Using select (Returns empty)c.Find(bson.M{"_id": bson.ObjectIdHex(p.ByName("id"))}).Select(bson.M{"races._id": bson.ObjectIdHex(p.ByName("raceId"))}).One(&result)//As an array (Returns empty)c.Find([]bson.M{{"_id": bson.ObjectIdHex(p.ByName("id"))}, bson.M{"races": bson.M{"$elemMatch": bson.M{"_id": bson.ObjectIdHex(p.ByName("raceId"))}}}}).One(&result)我正在使用 httprouter 和 p.ByName("...") 調用是傳遞給處理程序的參數。提前致謝。
查看完整描述

1 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

將采用該Select方法,因為文檔指出這可以選擇應為找到的結果檢索哪些字段,因此$elemMatch可以在此處結合使用運算符進行投影Select,最終查詢類似于:


c.Find(bson.M{

    "_id": bson.ObjectIdHex(p.ByName("id"))

}).Select(bson.M{

    "races": bson.M{

        "$elemMatch": bson.M{

            "_id": bson.ObjectIdHex(p.ByName("raceId"))

        }

    }

}).One(&result)


查看完整回答
反對 回復 2021-11-22
  • 1 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號