我需要对包含时间戳字符串(“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/