gpt4 book ai didi

regex - 将特定的返回查询转换为 mgo

转载 作者:IT王子 更新时间:2023-10-29 02:09:56 24 4
gpt4 key购买 nike

我有一个查询,它从包含特定文本的集合文档中返回所有名称。在以下示例中,不区分大小写地返回所有包含序列“oh”的名称;不返回文档中的其他字段:

find({name:/oh/i}, {name:1, _id:0})

我已尝试将此查询翻译成 mgo:

Find([]bson.M{bson.M{"name": "/oh/i"}, bson.M{"name": "1", "_id": "0"}})

但使用 mgo 时总是出现零结果。使用 mgo 进行此类查询的正确语法是什么?

这个问题与所谓的重复问题不同,因为这些问题都没有涉及如何限制 MongoDB 仅返回特定字段而不是整个文档。

最佳答案

要执行使用正则表达式模式进行过滤的查询,请使用 bson.RegEx类型。

要从结果文档中排除字段,请使用 Query.Select()方法。

就像这个例子:

c.Find(bson.M{"name": bson.RegEx{Pattern: "oh", Options: "i"}}).
Select(bson.M{"name": 1, "_id": 0})

正则表达式的翻译:

name:/oh/i

这意味着匹配 name 字段的值包含 "oh" 子字符串的文档,不区分大小写。这可以使用 bson.RegEx 表示,其中 RegEx.Pattern 字段获取上述表达式中使用的模式 ("oh") . RegEx.Options 现在可能包含应用/匹配模式的选项。该文档列出了可能的值。如果 Options 字段包含 'i' 字符,则表示匹配不区分大小写。

如果您有一个用户输入的术语,例如 "[a-c]",您必须引用正则表达式元字符,因此您应用的最终模式应该是 "\[a-c\]" 要轻松做到这一点,请使用 regexp.QuoteMeta()功能,例如

fmt.Println(regexp.QuoteMeta("[a-c]")) // Prints: \[a-c\]

Go Playground 上试试.

关于regex - 将特定的返回查询转换为 mgo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com