比方說,我有一個整數文檔。如何更改MongoDB中的類型?
當我嘗試將該值設置爲3.5,它仍然整數
db.users.update({}, {$set:{balance:3.5}})
我怎樣才能改變它漂浮/十進制?
比方說,我有一個整數文檔。如何更改MongoDB中的類型?
當我嘗試將該值設置爲3.5,它仍然整數
db.users.update({}, {$set:{balance:3.5}})
我怎樣才能改變它漂浮/十進制?
我只是做了一些例子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。所以對於這種情況,我建議編寫單元測試。
希望這對你有所幫助。
在這種情況下,反序列化器將引發TruncationException,因爲存儲在數據庫中的值不能存儲在Int32屬性中,而不會損失精度。如果你想要的值是通過將3.5值截斷爲3來反序列化,那麼你可以向SomeIntegerField添加一個屬性:[BsonRepresentation(BsonType.Int32,AllowTruncation = true)]。 –
你在使用什麼驅動程序? –
2個問題:#1:*你是否真的打算更新一切*?如果是這樣,你不使用多標誌,爲什麼不呢? #2:你是從司機的外殼做這個的嗎?如果是駕駛員,我們需要知道駕駛員。 –