2014-01-27 2 views
0

Я пытаюсь написать ниже запрос для обновления времени с серверным временем на C#.

db.users.update(
    { _id: 1 }, 
    { 
     $currentDate: 
     { 
      lastModified: true, 
      lastModifiedTS: { $type: "timestamp" } 
     } 
    }) 

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

ответ

1

Почти год спустя я наткнулся на этот вопрос, чтобы сделать то же самое и сделал небольшое исследование.

Я нашел интересный способ в версии 1.9.2 официального драйвера Монго:

var query = Query.EQ("_id", 1); 
var update = Update 
    .Set("field_timestamp_local", DateTime.Now) 
    .CurrentDate("field_timestamp_mongo"); 
collection.Update(query, update); 

Этот код устанавливает 2 поля в метку времени, первым местным клиентам метку времени, а второе поле на сервер время.

+0

Это не время сервера! – conceptacid

+0

@conceptacid: первое поле является локальным, второе на самом деле установлено на серверное время! Я сделал редактирование, чтобы сделать это более понятным. – Sunib

1

С $currentDate - это новая функция предстоящей версии 2.6, она может не поддерживаться вашим текущим драйвером. Вы всегда можете использовать BSON документы вместо строго типизированных оберток для его выполнения:

collection.Update(
    new QueryDocument() { { "_id", 1 } }, 
    new UpdateDocument() { 
    { "$currentDate", new BsonDocument { 
     { "lastModified", true }, 
     { "lastModifiedTS", new BsonDocument { { "$type", "timestamp" } } } 
    } } 
    }); 

Я предполагаю следующую версию драйвера C# будет поддерживать сильно типизированный помощник для этого.

+0

Thanks Avish! это сработало для меня. – Vibs

+0

У меня есть еще один вопрос. Как мы можем использовать $ currentDate для получения даты и времени на стороне сервера. Я не хочу обновлять какое-либо поле в коллекции. Мне нужно получить дату в моем коде и использовать его там. Благодаря!! – Vibs

+0

Нет простого способа сделать это AFAIK. Вы можете использовать 'eval', чтобы просто попросить сервер оценить' new Date() 'для вас, но это не очень хорошая идея. Возможно, есть способ заставить БД генерировать ObjectID для вас, из которого вы можете извлечь временную метку. – Avish

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