我有以下管道,我想在Golang中使用它并将其转换为bson.M。一种方法是使用bson.UnmarshalExtJSON,但我想知道该管道的bson.M的确切含义。实际上,我的问题出在$ arrayElemAt行。
"$lookup": {
"from" : "cities",
"localField": "cityId",
"foreignField": "_id",
"as" : "city"
}}
, {
"$project": {
"_id": 0,
"name": 1,
"age": 1,
"city": { "$arrayElemAt" : ["$city.name", 0]}
}}
我用这个bson.M:
stage1 := bson.M{
"$lookup": bson.M{
"from": "cities",
"localField": "cityId",
"foreignField": "_id",
"as" : "city",
},
}
stage2 := bson.M{
"$project": bson.M{
"_id": 0,
"name": 1,
"age": 1,
"city": bson.M{ "$arrayElemAt" : bson.M{"$city.name", 0} },
},
}
pipeline := make([]bson.M, 0)
pipeline = append(pipeline, stage1)
pipeline = append(pipeline, stage2)
上面的代码给了我编译器错误:缺少地图文字中的键在我有“ city”的那一行:bson.M {“ $ arrayElemAt”:bson.M {“ $ city.name“,0}} 。那么将$ arrayElemAt定义为bson.M的正确方法是什么?
答案 0 :(得分:0)
正确的翻译方式
"city": { "$arrayElemAt" : ["$city.name", 0]}
将是:
bson.M{"$arrayElemAt":[]interface{}{"$city.name",0}
由于以下原因,您遇到了编译错误:
bson.M{"$city.name", 0}
bson.M
是一个映射,因此正确的语法应使用:
而不是,
。