2017-09-01 22 views
1

Rustを使用してMongoDBデータベースのコレクション内のフィールドを更新しようとしています。私はこのコードを使用していた。RustでMongoDBのデータを更新する

extern crate mongodb; 

use mongodb::{Client, ThreadedClient}; 
use mongodb::db::ThreadedDatabase; 

fn main() { 
    let client = Client::connect("ipaddress", 27017); 

    let coll = client.db("DEV").collection("DEV"); 
    let film_a = doc!{"DEVID"=>"1"}; 
    let filter = film_a.clone(); 
    let update = doc!{"temp"=>"5"}; 

    coll.update_one(filter, update, None).expect("failed"); 
} 

これは、更新が唯一のいくつかの検索の後、私は$setを使用する必要があります意味のようです$オペレータ、で動作しますと言って私にエラーを与えます。私はこれのさまざまなバージョンを試してきましたが、型のミスマッチエラーなどしか得られません。

coll.update_one({"DEVID": "1"},{$set:{"temp" => "5"}},None).expect("failed"); 

どこが間違っていますか?

DBはこのように見えます。

db.DEVICES.find() 

{ "_id" : ObjectId("59a7bb747a1a650f1814ef85"), "DEVID" : 1, "temp" : 0, 
"room_temp" : 0 } 

{ "_id" : ObjectId("59a7bb827a1a650f1814ef86"), "DEVID" : 2, "temp" : 0, 
"room_temp" : 0 } 

答えて

1

あなたはかなりあります。コンパイル以下と私は(ヒント:あなたが引用符で「$セット」を同封していない):あなたの例を試してみたときに、私のために実行

#[macro_use(bson, doc)] 
extern crate bson; 
extern crate mongodb; 

use mongodb::{Client, ThreadedClient}; 
use mongodb::db::ThreadedDatabase; 

fn main() { 
    let client = Client::connect("localhost", 27017).unwrap(); 

    let coll = client.db("tmp").collection("tmp"); 
    let filter = doc!{"DEVID"=>"1"}; 
    let update = doc!{"$set" => {"temp"=>"5"}}; 

    coll.update_one(filter, update, None).unwrap(); 
} 

アドバイスのもう一つの作品を:unwrapではなくexpectを使用すると、あなたのより正確を与えるかもしれませんエラー。 MongoDBのライブラリを使用するためとして、

作者が明示的にそれはnot production readyだとそのドキュメントでさえupdate_one例が壊れていると言うように、私は離れているから宿泊しました。

代わりにwrapper over the battle-tested C-libraryを使用しました。

+0

iveは、引用符と他のものの束でセットを囲んでみたが、それはまだ働いていない、私はちょうど壊れていると思うようになった。 iveはCラッパーを使用しようとし始めましたが、何の例もありません。 – dmnte

+0

上記のコードを貼り付けて、Rustc 1.19でコンパイルして実行します。 – PureW

+0

コードはコンパイルされ、私のためにも実行されますが、 "1"を使用しているコードIMではフィールドを変更しませんでしたが、dbではちょうど1ですか? – dmnte

関連する問題