c++ - 在 MongoDB 中查询字符串的中间部分?

标签 c++ mongodb

我需要对包含时间戳字符串(“YYYYMMDD:HH:MM:SS.SSSS”)的集合运行查询。我想找到所有小时小于 9 小时和大于 14 小时的文档。SQL 提供了 MID() 函数,但我找不到等效的函数。如何在 C++ 中运行此查询?如果您不知道如何在 C++ 中但在 mongo shell 中让我知道,我可以将它转换为 C++。

更新 使用下面 JohnnyHK 的建议,我尝试了:

BSONObj queryafter = BSONObjBuilder().appendRegex("date", "........:0[0-8]").obj();
BSONObj queryafter = BSONObjBuilder().appendRegex("date", "........:[17-23]").obj();
c.update(dbcol, Query(querybefore), BSON("$set"<<BSON("noise"<<"true")), false, true);

它编译了但没有正确过滤。

最佳答案

它不是很优雅,但你可以在 shell 中使用正则表达式来做到这一点:

db.test.find({ts: /....:..:..:0[5-8]/})

在 C++ 驱动程序中,您将使用类似以下内容构建查询对象:

BSONObj query = BSONObjBuilder().appendRegex("ts", "....:..:..:0[5-8]").obj(); 

更新

对于您的新要求,它会涉及更多一些,但仍然可行:

BSONObjBuilder().appendRegex("ts", "^........:(0[0-8]|1[5-9]|2[0-3]):..:").obj();

关于c++ - 在 MongoDB 中查询字符串的中间部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214157/

相关文章:

c++ - if 语句与 if-else 语句,哪个更快?

android - 在 gradle sync android studio 上跳过 prebuilt-library.mk

c++ - 如何使用 MPI 程序从命令行读取参数?

javascript - 从预先存在的字段生成 ISO 日期

node.js - 什么导致 AWS Lambda 上的 Mongodb 超时错误?

node.js - 使用 Mongoose 获取所有数据库的列表

C++ 游戏编程帮助。 super 简单

c++ - SSL 证书,不通过 thrift 进行身份验证,但可以通过浏览器进行身份验证

database - 如何在 Go 中重用 MongoDB 连接

mongodb - 在 MongoDB 中缓存重复查询结果