0

** より多くのコードで更新:

私は似たようなクラス/エンティティを持っています

public class price
    {
        public decimal mrp { get; set; }

}

これは、次のような複雑なドキュメントの一部です。

{
  "Name" : "Name",
  "_id" : ObjectId("522a83c2a833e20db4b028ea"),

  "price" : {
    "mrp" : 599,
  }
}

私はこのドキュメントを更新するためにc#ドライバーを使用しています...次のように:

// ドキュメントにフィールドが存在するかどうかをチェックする関数 private bool check_field(BsonDocument doc, string field_name) { if (doc.Contains(field_name)) { return true; } そうでなければ { false を返します。} }

// ドキュメント全体を取得

foreach (var c in cursor)
            {
                product prd = new product();
                prd.id = check_field(c.ToBsonDocument(), "id") ? convertToString(c.ToBsonDocument()["id"]) : null;
                prd.price = check_field(c.ToBsonDocument(), "price") ? JsonConvert.DeserializeObject<price>(c.ToBsonDocument()["price"].ToString()) : null;
                products.Add(prd);
            } 

for (var i = 0; i < products.Count(); i++)
            {
                price price_list = new price();
    price_list.mrp = 500;
    MongoDB.Driver.Builders.UpdateBuilder update = MongoDB.Driver.Builders.Update.SetWrapped("price", (price)price_list);
            }

コマンドを実行すると、 $set コマンドが次のように発行されると予想されます

{ "$set" : { "price" : { "mrp" : 500 }}}
but get this instead
{ "$set" : { "price" : { "mrp" : "599" }}}

ヘルプ/ポインタは本当に役に立ちます

4

1 に答える 1

0

最後に、データ型を double (または float) に変更するとうまくいきました。Decimal は 64 ビットなので、mongo は NumberLong として保存します。

于 2013-09-25T14:27:37.210 に答える