2012-01-31 54 views
1

我試圖插入到MongoDB集合中。MongoDB/C# - 插入帶有自動填充時間戳的文檔

我有一個數據模型包含Id(ObjectId)和時間戳(長)作爲前兩個屬性。

從這裏https://docs.mongodb.com/manual/reference/bson-types/#timestamps我明白,如果這些都是null,他們應該會自動填充?

當保存實體時,雖然時間戳保持爲空,但ObjectId(Id/_id)列仍在設置中。有什麼特別的我需要做的設置這個?

我已經試過:

newdoc= Update.Replace(doc.ToBsonDocument().Set("Timestamp", new BsonJavaScript("new Timestamp()"))); 
    db.mydocs.Save(newdoc); 

但隨後得到 「GetDocumentId方法不能被稱爲一個UpdateWrapper。」例外。

任何人都可以指出我正確的方向嗎?

在此先感謝

山姆

回答

1

時間戳必須是在你反對前兩個領域之一,否則也不會得到填補。

+0

是的,這是我的問題。我的映射類(POCO對象)有一個字符串Id {get; set;}和long TimeStamp {get; set;}作爲前兩個道具 – sambomartin 2012-02-01 00:18:08

+0

您確定沒有任何其他隱藏字段嗎? _id或者你的框架插入的東西。您是否通過運行mongo shell來查看條目? – 2012-02-01 00:38:55

+0

嗨ivo,是的,我使用了mongo shell應用程序。前兩個屬性是_id和Timestamp。 (使用db.collection.find()我可以在文檔對象中看到。)在鏈接中,我使用「new Timestamp()」發佈了任何其他想法/想法的引用?謝謝 – sambomartin 2012-02-01 14:36:33

0
//Use C# native DateTime Library 
var dateTime = DateTime.UtcNow; 

//Filter 
var filter = builder.Eq("SomeKey", "SomeValue"); 

//What needs to be updated 
var update = Builders<BsonDocument>.Update     
.Set("createdAt", dateTime); 

//Upsert Option! 
var options = new UpdateOptions { IsUpsert = true }; 

collection.UpdateMany(filter, update, options) 

//Out Put 
"createdAt" : ISODate("2016-12-21T19:25:22.471Z") 
0

在互聯網上找不到答案,所以花了一些時間來弄清楚如何去做。解決方案似乎相當微不足道。當我試圖在控制檯輸入new Timestamp()時,它返回Timestamp(0, 0)這對我來說是一個暗示。所有你需要做的是:

doc.Timestamp = new BsonTimestamp(0, 0); 

這將使服務器設置爲您的時間戳的值。