Мне нужно создать отметку времени в моей коллекции mongodb. Я использую C# в передний конец .my код:Как сделать разметку временной отметки для вставки и обновления записи в монго?
internal static void CreateStudent(string Id, string Name,string strUserId)
{
MongoServer server = MongoServer.Create(ConnectionString);
MongoDatabase mydb = server.GetDatabase("Database");
MongoCollection<BsonDocument> Student = mydb.GetCollection<BsonDocument>("Student");
BsonDocument colectionGenre = new BsonDocument {
{ "Code", Id }, //Id is Auto Generated in sql. Fetch from there using Output parameter and save it in one variable and pass that here
{ "Name", Name },
{ "Status","Y"},
{"stamps" , new BsonDocument {
{"Ins_date", DateTime.Now},
{"up_date",""},
{"createUsr", strUserId},
{"updUsr", ""},
{"Ins_Ip", GetIP()},
{"Upd_IP",""}}}
};
Student.Insert(colectionGenre);
}
internal static void UpdateStudent(string Id, string Name,string strUserId)
{
MongoServer server = MongoServer.Create(ConnectionString);
MongoDatabase mydb = server.GetDatabase("Database");
MongoCollection<BsonDocument>Student = mydb.GetCollection<BsonDocument>("Student"); ;
// Query for fetch the ID which is edited by the User...(user can only able to edit the NAME field alone)
var query = new QueryDocument {
{ "Code", Id }};
// After Fetch the correspondent ID it updates the name with the Edited one
var update = new UpdateDocument {
{ "$set", new BsonDocument("Name", Name) }
};
// Updated Query.(Id is same as previous. Name is updated with new one)
{"stamps" , new BsonDocument {
{"up_date",DateTime.Now},
{"updUsr", strUserId},
{"Upd_IP",GetIp()}}}
}}
};
Student.Update(query,update,UpdateFlags.Upsert, SafeMode.True);
}
Он отлично подходит для метода ВСТАВИТЬ работает со временем (Stamp), как только создается запись. Но проблема заключается в методе обновления. Когда обновление пользователь что-то время вставки также изменяется с обновленным временем ..
После пользователя обновит имя, я хочу, чтобы моя коллекция выглядит эта
{
"_id" : ObjectId("5178aea4e6d8e401e8e51dc0"),
"Code": 12,
"Name": Sname,
"Stamps:"{
"Ins_date":03:34:00,
"up_date": 04:35:12
}
}
Но моя проблема как раз будет то же самое после того, как Обновить. Это потому, что он принимает текущую функцию даты и времени. Как я могу достичь вышеуказанного выхода. Ему нужен любой драйвер. Что-то для меня ...
Почему вы устанавливаете значение даты вставки, когда говорите, что не хотите, чтобы он был изменен? Обновление сливается с существующим документом и не заменяет его. – WiredPrairie
Вы используете флаг upsert? Я не вижу его в коде, но похоже, что вы не знаете, будет ли запись обновляться или вставляться? –
@ AsyaKamsky Я пробовал с подобным образом (Upset flag UpdateFlags.Upsert, SafeMode.True) .. Но он остается таким же. – Aarthi