如何使用mongo-go-driver过滤字段。使用findopt.Projection进行了尝试,但没有成功。
type fields struct { _id int16 } s := bson.NewDocument() filter := bson.NewDocument(bson.EC.ObjectID("_id", starterId)) var opts []findopt.One opts = append(opts, findopt.Projection(fields{ _id: 0, })) staCon.collection.FindOne(nil, filter, opts...).Decode(s)
最后,我要取消显示字段“ _id”。但是文件没有改变。
编辑: 随着mongo- go驱动程序的发展,可以使用以下简单方法指定投影bson.M:
bson.M
options.FindOne().SetProjection(bson.M{"_id": 0})
原始(旧)答案如下。
它对您不起作用的原因是因为fields._id未导出该字段,因此,没有其他包可以访问它(仅声明包)。
fields._id
您必须使用导出的字段名称(以大写字母开头),例如ID,并使用struct标记将其映射到MongoDB _id字段,如下所示:
ID
_id
type fields struct { ID int `bson:"_id"` }
现在使用投影执行查询:
projection := fields{ ID: 0, } result := staCon.collection.FindOne( nil, filter, options.FindOne().SetProjection(projection)).Decode(s)
请注意,您也可以将a bson.Document用作投影,您不需要自己的struct类型。例如,以下操作相同:
bson.Document
projection := bson.NewDocument( bson.EC.Int32("_id", 0), ) result := staCon.collection.FindOne( nil, filter, options.FindOne().SetProjection(projection)).Decode(s)