Mongocxx与正则表达式模式匹配不同



以下工作C++代码将返回给定字段的所有非重复(唯一值(:

document command;
command.append(
kvp("distinct", "listings"), 
kvp("key", "streetName")
);

检索所有非重复值,下面是输出的示例:

{
"values": [
"3rd street",
"4th",
"5th",
...
"zion",
"zuni"
],
"ok": 1.0
}

在 mongodb shell 中,我能够使用正则表达式将非重复值减少到以"glen"开头的值:

db.listings.distinct(
"streetName",
{ "streetName": {"$regex": /^glen/, "$options" : ""} }
)

检索匹配的非重复值,下面是输出的示例:

[ "格伦", "格伦代尔", "格伦菲尔德" ]

我遇到的问题是,在使用mongo-cxx 驱动程序时,我无法弄清楚如何将不同的值*限制为与正则表达式模式匹配的值:

document command;
command.append(
kvp("distinct", "listings"), 
kvp("key", "streetName"),
kvp("streetName", bsoncxx::types::b_regex{ "^glen"})
);

这是发送到mongoDB服务器的命令的样子:

{
"distinct": "listings",
"key": "streetName",
"streetName": {
"$regex": "^glen",
"$options": ""
}
}

不幸的是,上面的命令返回错误:BAD(BSON 字段 'distinct.streetName' 是一个未知字段。: 通用服务器错误(

希望有人可以帮助我弄清楚如何为数据子集(匹配文档(获取不同的值。

如果你不介意直接调用distinct(),这个尝试翻译你提供的MongoDB shell示例会为你工作吗?

db["listings"].distinct(
"streetName",
make_document(kvp("streetName", bsoncxx::types::b_regex{ "^glen" }))
);

最新更新