Regex 在Rust中使用正则表达式查询MongoDB

Regex 在Rust中使用正则表达式查询MongoDB,regex,database,mongodb,rust,Regex,Database,Mongodb,Rust,我正在尝试实现as解决方案,以解决一个问题 在本例中,他们使用使用正则表达式的选择器发出更新: db.history.updateOne({“\u id:/^7000000/,“count:{$lt:1000}), { “$push”:{ “历史”:{ “类型”:“购买”, “股票代码”:“MDB”, “数量”:25, “日期”:ISO日期(“2018-11-02T11:43:10”) } }, “$inc”:{“计数”:1}, “$setOnInsert”:{“\u id”:“7000000

我正在尝试实现as解决方案,以解决一个问题

在本例中,他们使用使用正则表达式的选择器发出更新:

db.history.updateOne({“\u id:/^7000000/,“count:{$lt:1000}),
{ 
“$push”:{
“历史”:{
“类型”:“购买”,
“股票代码”:“MDB”,
“数量”:25,
“日期”:ISO日期(“2018-11-02T11:43:10”)
} },
“$inc”:{“计数”:1},
“$setOnInsert”:{“\u id”:“7000000\u 1541184190”}
},
{upsert:true})
我试图在Rust中也这样做,但是查询将我的正则表达式解释为字符串文本,而不是计算正则表达式

#[派生(调试、克隆、序列化、反序列化)]
发布结构重复BucketUpdate{
#[serde(with=“serde_regex”)]
id:Regex,
设备id:Uuid,
会话id:Uuid,
set_id:Uuid,
练习:弦,
级别:字符串,
计数:mongodb::bson::bson,
}
重复BucketUpdate的impl From{
fn from(值:JsonApiRepetition)->Self{
设id=format!(“^{}”,value.device_id.to_string().replace(“-”,”);
让re=Regex::new(&id).unwrap();
重复BucketUpdate{
id:re,
设备id:value.device\u id,
session\u id:value.session\u id,
set\u id:value.set\u id,
锻炼:价值。锻炼,
级别:value.level,
计数:mongodb::bson::bson!({“$lt”:BUCKET\u RECORD\u LIMIT}),
}
}
}
让update=bson::doc!{
“$push”:{
“重复”:mongodb::bson::to_bson(&repeation_update).unwrap(),
},
“$inc”:{“计数”:1},
“$setOnInsert”:{“id”:oid}
};
让options=mongodb::options::UpdateOptions::builder()
.upsert(正确)
.build();
collection.update_one(查询、更新、选项).wait.map_err(CollectorError::DbError)?;
如果我
println我看到的更新参数:

query: Document({"id": String("^6fcd683c20d5415da1341e7d2f780749_"), "device_id": String("6fcd683c-20d5-415d-a134-1e7d2f780749"), "session_id": String("8388e24d-e680-46f4-9205-b9e43e39a17a"), "set_id": String("53d5a3ec-5962-402d-8e8a-41e9c5e3e01f"), "exercise": String("Bench Press"), "level": String("WheelsWithinWheels"), "count": Document(Document({"$lt": Int32(1000)}))})
update: Document({"$push": Document(Document({"repetitions": Document(Document({"number": Int32(88), "rom": Double(69.42), "duration": Double(666.0), "time": Int64(10870198172412)}))})), "$inc": Document(Document({"count": Int32(1)})), "$setOnInsert": Document(Document({"id": String("6fcd683c20d5415da1341e7d2f780749_1600107371599537000")}))})
options: UpdateOptions {
    array_filters: None,
    bypass_document_validation: None,
    upsert: Some(
        true,
    ),
    collation: None,
    hint: None,
    write_concern: None,
}
它不匹配,它将每个更新作为一个新文档插入,而不是将后续更新插入


我可以从mongodb shell成功发出基于正则表达式的查询。如何像示例中那样使用Rust和mongodb查询正则表达式?

我解决了这个问题,因此对于将来遇到此问题的任何人: mongodb驱动程序不使用Regex板条箱,而是使用

我的用法从上述(见问题)更改为:

#[派生(调试、克隆、序列化、反序列化)]
发布结构重复BucketUpdate{
发布id:mongodb::bson::bson,
发布设备\u id:Uuid,
会话id:Uuid,
set_id:Uuid,
练习:弦,
级别:字符串,
计数:mongodb::bson::bson,
}
让id=格式!(“^{}”,value.device_id.to_string().replace(“-”,”);
让re=mongodb::bson::Regex{
图案:id,
选项:String::new(),
};
瞧,马奇