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)
TA贡献1876条经验 获得超5个赞
试试这个
var res []MyType err := keysCollection.Find(ctx, bson.M{key: bson.M{"$exists": true}}, &res)
- 2 回答
- 0 关注
- 96 浏览
添加回答
举报