当前位置: 首页 > 面试题库 >

如何使用官方的mongo-go-driver驱动程序过滤mongo文档中的字段

阴礼骞
2023-03-14
问题内容

如何使用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

options.FindOne().SetProjection(bson.M{"_id": 0})

原始(旧)答案如下。

它对您不起作用的原因是因为fields._id未导出该字段,因此,没有其他包可以访问它(仅声明包)。

您必须使用导出的字段名称(以大写字母开头),例如ID,并使用struct标记将其映射到MongoDB _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类型。例如,以下操作相同:

projection := bson.NewDocument(
    bson.EC.Int32("_id", 0),
)
result := staCon.collection.FindOne(
    nil, filter, options.FindOne().SetProjection(projection)).Decode(s)


 类似资料:
  • 问题内容: 参考文献: http://www.mongodb.org/display/DOCS/Java+Tutorial 对于mongo db来说还算是新手,但是我正在尝试更新集合中现有文档的一部分…不幸的是,上面的链接没有更新示例。 本质上,我只希望能够: 向文档添加新字段 将文档的现有字段更新为新值 这是我的代码(Grails + Groovy + Java + MongoDB + Java

  • 我需要从数据库中获取文档,数据如下 我使用了下面的代码段,但它返回 2 个文档而不是一个。 上面的代码还提供了一个文档,该文档对数组中的一个元素具有isActive:false。 预期输出是systemName:ABC的Document,因为它在数组的所有元素中都有isActive:false。 感谢任何帮助/建议。

  • 以下查询在mongo shell中完美运行。 我想用java编程实现同样的功能。我尝试了以下方法,但没有得到任何结果。

  • 我正在尝试将mongo shell与我的mongo atlas M0集群连接,结果出现了这个错误 错误消息 我尝试的解决方案无效: 我将monog版本升级到4.2,以便与atlas中的mongo版本保持同步,但没有解决mongo出现此错误的问题 "mongodb://cluster0-shard-00-02.79t7i.azure.mongodb.net:27017,cluster0-shard-

  • 我试图将一个不可变的对象从MongoDB映射到我的Java POJO,我不断得到以下错误: 似乎在使用不可变对象时,我需要使用@BsonCreator进行注释,但这似乎不起作用,我认为这可能是因为使用此注释需要我以某种方式配置。也许我是瞎子,但我似乎找不到任何关于如何配置的例子。任何帮助都将不胜感激。以下是我的注释POJO:

  • [debug]应用程序-update(){“_id”:{“$OID”:“5759542A4E0BF602ADCAB149”},“title”:“文本平铺”,“信誉”:0} [debug]application-org.mongodb.scala.observableImplicits$boxedobservable@61ddc581 [debug]application-onsubscribe:o