0

我需要在我的 mongodb 集合中创建一个时间戳。我在前端使用 C#。我的代码是:

        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);
    }

创建记录后,它适用于带有 time(Stamp) 的 INSERT 方法。但问题在于更新方法。当用户更新某些东西时,插入时间也会随着更新时间而改变..

用户更新名称后,我希望我的遗嘱集合看起来像这样

{
"_id" : ObjectId("5178aea4e6d8e401e8e51dc0"),
"Code": 12,
"Name": Sname,
"Stamps:"{
"Ins_date":03:34:00,
"up_date": 04:35:12
}
}

但我的问题是更新后的时间都一样。那是因为它需要当前的日期和时间函数..我怎样才能实现上述输出。它需要任何驱动程序。为我建议一些东西......

4

5 回答 5

0

最后我得到了答案...在 INSERT 方法中只需传递以下内容

  {"Insert-stamps" , new  BsonDocument { 
      {"Ins_date", DateTime.Now}, 
      {"createUsr", strUserId}, 
      {"Ins_Ip", GetIP()}}},
   {"Update-stamps" , new  BsonDocument {
       {"up_date",""}, 
       {"updUsr", ""}, 
       {"Upd_IP",""}}} 

并且在 UPDATE 方法中

 {"Update-stamps" , new  BsonDocument { 
       {"up_date", DateTime.Now}, 
       {"updUsr", StrUserId},
       {"Upd_IP",GetIP()}}} 

它适用于我的标准....

于 2013-05-27T06:57:04.113 回答
0

Ins_date当您更新文档时,您正在为该字段传递一个值。只需从更新文档中删除它,它不会改变它。

var update = new UpdateDocument {
     {"$set", new BsonDocument { 
        {"State_strName", name}, 
        {"stamps" , new  BsonDocument {
          {"up_date",DateTime.Now}, 
          {"createUsr", ""}, 
          {"updUsr", ""},
          {"Ins_Ip", GetIP()}, 
          {"Upd_IP",GetIP()}}}              
       };
    tblmytbl.Update(query, update);
于 2013-05-08T10:24:10.440 回答
0

在更新 mongoDB 中的数据时,您为 Ins_date 和 up_date 传递相同的值,即 DateTime.Now(当前系统日期和时间)。因此,相同的值在您的 monoDB 文档中更新。

为此,您可以做一件事:-在更新您的 mongoDB 文档之前,您通过在 C#.net 中使用 sql 查询从数据库中获取 Ins_date 值,然后将此值用于 Ins_date,对于 up_date 使用 DateTime。现在您的两个值将不同.

var update = new UpdateDocument {
         {"$set", new BsonDocument { 
            {"State_strName", name}, 
            {"stamps" , new  BsonDocument {
              {"Ins_date", **Ins_date values_from your database**} ,  
              {"up_date",DateTime.Now}, 
              {"createUsr", ""}, 
              {"updUsr", ""},
              {"Ins_Ip", GetIP()}, 
              {"Upd_IP",GetIP()}}}              
           };
        tblmytbl.Update(query, update);
于 2013-05-08T12:19:30.800 回答
0

听起来您需要的是新的$setOnInsert运算符,它是在 2.4 中针对这个用例添加的。

当带有 upsert 标志的更新导致插入时,您想将 $set insert_date 设置为 Date.now 但是当它是常规更新时,您根本不想设置它。因此,现在有了更新,您应该将$set其用于要设置是更新还是插入的常规字段,但$setOnInsert用于仅应在插入期间设置的字段。

于 2013-05-26T03:57:28.030 回答
0

您如何使用唯一 id 或其他唯一值更新现有文档中的值。检查唯一 id 或值是否已存在于您的数据库文档中。如果存在意味着仅更改更新时间不做任何事情。 .

于 2013-05-08T11:00:48.990 回答