MongoDB / C # - Вставка документа с автоматически заполненной отметкой времени - PullRequest
1 голос
/ 01 февраля 2012

Я пытаюсь вставить в коллекцию MongoDB.

У меня есть модель данных, содержащая Id (ObjectId) и Timestamp (long) в качестве первых двух свойств.

Fromздесь https://docs.mongodb.com/manual/reference/bson-types/#timestamps Я понимаю, что если они оба равны NULL, они должны заполняться автоматически?

При сохранении сущности устанавливается столбец ObjectId (Id / _id), хотя отметка времени остается нулевой,Есть ли что-то особенное, что мне нужно сделать, установить set this?

Я пробовал:

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

Но потом получаю "GetDocumentId метод не может быть вызван на UpdateWrapper."исключение.

Кто-нибудь может указать мне правильное направление?

Заранее спасибо

Сэм

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Отметка времени должна быть одним из первых двух полей в вашем объекте, иначе она не будет заполнена.

0 голосов
/ 03 января 2018

Не удалось найти ответ в интернете, поэтому потребовалось некоторое время, чтобы понять, как это сделать.Решение кажется довольно тривиальным.Когда я попытался набрать new Timestamp() в консоли, он вернул Timestamp(0, 0), что было подсказкой для меня.Все, что вам нужно сделать, это:

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

, что заставит сервер установить для вас значение метки времени.

0 голосов
/ 21 декабря 2016
//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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...