2014-09-03 4 views
2

Может кто-то пожалуйста, помогите мне с этой проблемой, связанной MongoDB C# драйвер:

У меня есть поле, которое автоматически обновляется с датой от сервера. Но он работает только при обновлении документа.

Это работает (потому что это обновление (?)):

IMongoUpdate update = new UpdateDocument(new BsonDocument().Add("$currentDate", new BsonDocument().Add("lastModified", true) 
         .Add("lastModifiedTS", new BsonDocument("$type", "timestamp"))).Add(new BsonDocument() 
         .Add("$set", new BsonDocument().Add("altered", alteredElementValue)))); 

var updateResult = _collection.Update(Query.EQ("_id", key), update); 

Это не работает (это вставка):

_collection.Save(bson.First().Add(new UpdateDocument(new BsonDocument().Add("$currentDate", new BsonDocument().Add("lastModified", true) 
         .Add("lastModifiedTS", new BsonDocument("$type", "timestamp")))))); 

Но когда я вставить документ, он дает эту ошибку :

A first chance exception of type 'MongoDB.Driver.WriteConcernException' occurred in MongoDB.Driver.dll 
Additional information: WriteConcern detected an error 
'The dollar ($) prefixed field '$currentDate' in '$currentDate' is not valid for storage.'. 
(Response was { "ok" : 1, "code" : 52, "err" : "The dollar ($) prefixed field '$currentDate' in '$currentDate' is not valid for storage.", "n" : NumberLong(0), "updatedExisting" : false }). 

Может быть, потому что MOngoDB поддерживает такие поля только для обновления?

+1

Это может быть точный ответ об ошибке, который вы получили. У вас не может быть полей в документе, начинающихся с '$'. Это зарезервировано для операторов, поэтому поля не могут быть названы таким образом. Возможно, вы имеете это в обратном порядке? Значит, вы действительно хотите сохранить «текущую временную метку» в поле «lastModified»? –

ответ

Смежные вопросы