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

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

如何檢查密鑰是否存在于蒙哥DB中

如何檢查密鑰是否存在于蒙哥DB中

Go
長風秋雁 2022-09-12 16:07:56
我正在嘗試檢查MongoDB集合中是否存在密鑰?;旧?,我需要將字符串數組映射到特定鍵。如果該鍵存在,我想通過添加新值來更新列表,否則創建一個具有初始值的新鍵(如果添加了新鍵,則最初只會添加1個值)。我在網上找到了一些例子,盡管我無法讓它在本地工作。以下是我的代碼(我使用的是官方的Go MongoDB驅動程序):key:= "some_key" database := client.Database("dbName") keysCollection := database.Collection("keys") keysCollection.Find(nil, {key:{$exists:true}});我遇到2個關于這個組件的問題{key: {$exists:true}}invalid character U+0024 '$':當嘗試檢查 是否存在時,在 ,盡管這似乎是 MongoDB 文檔支持檢查密鑰本身是否存在的內容,而不檢查映射到它的確切值。key{$exists:true}syntax error: unexpected {, expecting expression:在的開頭,看起來我無法通過結構?{key: {$exists:true}}這是我第一次使用MongoDB,我在GoLang方面的經驗很少,并且被困在這個看似很小的問題上。我這樣做是正確的嗎?如果是這樣,我該如何解決這些問題?
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

要檢查集合中是否存在鍵,下面分別是 shell 和 golang 中的查詢。假設示例文檔的集合為:mongo


{ _id: 1, arr: [ "red", "blue" ] }

{ _id: 2  }

查詢:


db.collection.find( { "arr": { "$exists": true } } )

請參閱$exists的用法。


var result bson.M

filter := bson.D{{ "arr", bson.D{{ "$exists", true }} }}

err = collection.FindOne(context.TODO(), filter).Decode(&result)

if err != nil {

    log.Fatal(err)

}

fmt.Printf("Found a single document: %+v\n", result)


我正在嘗試檢查MongoDB集合中是否存在密鑰。我需要將字符串數組映射到特定鍵。如果該鍵存在,我想通過添加新值來更新列表,否則創建一個具有初始值的新鍵(如果添加了新鍵,則最初只會添加1個值)。


若要根據條件更新字段,需要使用聚合管道進行更新。以下 shell 和 golang 查詢使用條件更新所有文檔 - 如果數組字段存在,則添加來自 的值,或者如果該字段不存在,則使用來自的值創建一個新字段。newValuearrnewValue


var newValue = "white"


db.collection.updateMany(

  { },

  [ { 

       $set: { 

           arr: { 

               $concatArrays: [ 

                   { $ifNull: [ "$arr", [ ] ] }, 

                   [ newValue ] 

               ] 

           } 

       } 

  } ]

)

戈朗更新:


newValue := "white"

filter := bson.D{{}}


pipe := bson.D{{ "$set", bson.D{{ "arr", bson.D{{ "$concatArrays", bson.A{ bson.D{{"$ifNull",bson.A{ "$arr", bson.A{} }}}, bson.A{ newValue } } }} }} }}

    

updateResult, errr := collection.UpdateMany(ctx, filter, mongo.Pipeline{ pipe })

    

if errr != nil {

    log.Fatal(errr)

}

fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)



查看完整回答
反對 回復 2022-09-12
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

試試這個

var res []MyType
err := keysCollection.Find(ctx, bson.M{key: bson.M{"$exists": true}}, &res)


查看完整回答
反對 回復 2022-09-12
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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