如何检查密钥是否存在于蒙哥DB中

我正在尝试检查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方面的经验很少,并且被困在这个看似很小的问题上。

我这样做是正确的吗?如果是这样,我该如何解决这些问题?


长风秋雁
浏览 97回答 2
2回答

泛舟湖上清波郎朗

要检查集合中是否存在键,下面分别是 shell 和 golang 中的查询。假设示例文档的集合为:mongo{ _id: 1, arr: [ "red", "blue" ] }{ _id: 2  }查询:db.collection.find( { "arr": { "$exists": true } } )请参阅$exists的用法。var result bson.Mfilter := 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 查询使用条件更新所有文档 - 如果数组字段存在,则添加来自 的值,或者如果该字段不存在,则使用来自的值创建一个新字段。newValuearrnewValuevar 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)

慕运维8079593

试试这个var res []MyType err := keysCollection.Find(ctx, bson.M{key: bson.M{"$exists": true}}, &res)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go