使用官方的mongo-go-driver

时间:2019-10-12 23:35:36

标签: mongodb go mongodb-query mongo-go

我有一个数据库字段:

            "sessionid": "C-dhf",
            "given": "NURSE ",
            "family": "SHARK",
            "name": "SHARK, NURSE",

我正在尝试创建一个查询,该查询将查询数据库以查找以“ s”开头的记录,给定名称以“ n”开头。我正在使用以下内容创建过滤器。

        {"sessionid", "C-dhf"},
        {"$and", bson.A{
            bson.D{{"family", primitive.Regex{Pattern: "^s", Options: "i"}}},
            bson.D{{"given", primitive.Regex{Pattern: "^n", Options: "i"}}},
        }},
    }

查找中使用的过滤器值为:

[{sessionid C-dhf} {$and [[{family {"pattern": "^s", "options": "i"}}] [{given {"pattern": "^n", "options": "i"}}]]}]

发现是:

cursor, err := collection.Find(context.TODO(), filter, findOptions)

它返回数据库中的所有记录,就好像它根本没有看过滤器一样。

对于多字段通配符查询,正确的go语法是什么?

1 个答案:

答案 0 :(得分:1)

默认情况下,所有列出的条件都处于逻辑AND连接($and)中,因此您无需添加:

filter := bson.D{
    {"sessionid", "C-dhf"},
    {"family", primitive.Regex{Pattern: "^s", Options: "i"}},
    {"given", primitive.Regex{Pattern: "^n", Options: "i"}},
}

如果您想要逻辑OR连接,则使用的语法和结构将是适当的:如果您想要具有给定会话ID,其族名以s或给定名称以{{ 1}}。看起来可能像这样:

n