使用官方 mongo-go-driver 进行适当的通配符多字段查询
Proper wildcard multi field query with the official mongo-go-driver
我有一个数据库字段:
"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)
它 returns 数据库中的所有记录,就好像它甚至没有查看过滤器一样。
多字段通配符查询的正确语法是什么?
默认所有列出的条件都是逻辑与连接($and
),所以你不需要添加:
filter := bson.D{
{"sessionid", "C-dhf"},
{"family", primitive.Regex{Pattern: "^s", Options: "i"}},
{"given", primitive.Regex{Pattern: "^n", Options: "i"}},
}
如果您想要逻辑或连接,您使用的语法和结构将是合适的:如果您想要具有给定会话 ID 且其姓氏以 s
开头或名字以 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"}}},
}},
}
我有一个数据库字段:
"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)
它 returns 数据库中的所有记录,就好像它甚至没有查看过滤器一样。
多字段通配符查询的正确语法是什么?
默认所有列出的条件都是逻辑与连接($and
),所以你不需要添加:
filter := bson.D{
{"sessionid", "C-dhf"},
{"family", primitive.Regex{Pattern: "^s", Options: "i"}},
{"given", primitive.Regex{Pattern: "^n", Options: "i"}},
}
如果您想要逻辑或连接,您使用的语法和结构将是合适的:如果您想要具有给定会话 ID 且其姓氏以 s
开头或名字以 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"}}},
}},
}