为了账号安全,请及时绑定邮箱和手机立即绑定

使用官方 mongo-go-driver 进行正确的通配符多字段查询

使用官方 mongo-go-driver 进行正确的通配符多字段查询

Go
至尊宝的传说 2023-07-31 10:52:30
我有一个数据库字段:            "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 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

默认情况下,所有列出的条件都采用逻辑 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名称以 开头n。这可能看起来像这样:


filter := bson.D{

    {"sessionid", "C-dhf"},

    {"$or", bson.A{

        bson.D{{"family", primitive.Regex{Pattern: "^s", Options: "i"}}},

        bson.D{{"given", primitive.Regex{Pattern: "^n", Options: "i"}}},

    }},

}


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信