2011-01-25 88 views
1

比方說,我有一個整數文檔。如何更改MongoDB中的類型?

當我嘗試將該值設置爲3.5,它仍然整數

db.users.update({}, {$set:{balance:3.5}}) 

我怎樣才能改變它漂浮/十進制?

+0

你在使用什麼驅動程序? –

+0

2個問題:#1:*你是否真的打算更新一切*?如果是這樣,你不使用多標誌,爲什麼不呢? #2:你是從司機的外殼做這個的嗎?如果是駕駛員,我們需要知道駕駛員。 –

回答

1

我只是做了一些例子C#中:

public class Test 
    { 
     [BsonId] 
     public string Id { get; set; } 

     public int SomeIntegerField { get; set; } 
    } 

    [TestMethod] 
    public void TypesTest() 
    { 
     var db = MongoRead.Instance; 
     var collection = db.Database.GetCollection("test"); 
     var id = Guid.NewGuid().ToString(); 
     var test = new Test() { SomeIntegerField = 5, Id = id }; 
     collection.Insert(test); //here type of SomeIntegerField in mongodb Integer 

     //but after update type become Float64 
     collection.Update(Query.EQ("_id", id), Update.Set("SomeIntegerField", 3.5)); 
    } 

但是,如果你嘗試自動desirialize測試類回更新後,它將引發錯誤,因爲SomeIntegerField的類型將是Float64。所以對於這種情況,我建議編寫單元測試。

希望這對你有所幫助。

+0

在這種情況下,反序列化器將引發TruncationException,因爲存儲在數據庫中的值不能存儲在Int32屬性中,而不會損失精度。如果你想要的值是通過將3.5值截斷爲3來反序列化,那麼你可以向SomeIntegerField添加一個屬性:[BsonRepresentation(BsonType.Int32,AllowTruncation = true)]。 –

1

請檢查update()語法。 update()的第一個參數始終是QUERY 而不是UPDATE子句。

+0

你說得對。這是一個錯字。我在查詢中使用了正確的一個。 – Alex