2016-06-13 73 views

回答

2

你可以嘗試做一些事情,如果你不希望從代碼中處理這個(我在下面直接上蒙戈外殼執行的代碼):

  1. 如果你想使用$的currentdate使用更新UPSERT = TRUE:

    db.orders.update(
        {"_id":ObjectId()}, 
        { 
         $currentDate: { 
         createtime: true 
         } 
        }, 
        { upsert: true } 
    ) 
    

(除非您使用原始命令),它會產生現在的應用服務器,而不是日期/時間的OBJECTID。

  • 使用新的時間戳或日期直接對象:

    db.orders.insert(
        "createtime": new Timestamp() 
    ) 
    
  • 與大多數駕駛員的問題將是然後以確保新的對象上mondodb創建服務器 - 不在運行代碼的機器上。您希望驅動程序允許運行原始插入命令。

    兩者都將用於避免應用程序服務器機器之間的時間差異/時間同步問題。

    +0

    謝謝。我認爲第一個是更好的方法,儘管我想明確地避免自己創建'_id'。我同意你對第二個問題的關注,即根據驅動程序日期/時間戳可以在客戶端或服務器端填充。 – russoue

    0

    $currentDate是一個更新運算符,它通過更新操作填充日期字段和當前日期。

    要自動填入日期字段,而新的MongoDB文檔插入,請嘗試執行下面的代碼片段

    var current_date=new Date(); 
    db.collection.insert({datefield:current_date}) 
    

    在上面的代碼片斷聲明

    新的Date()

    創建新的JavaScript包含年,月,日,小時的日期對象,一分鐘,一秒鐘,毫秒

    +0

    我對此方法的擔憂是我不想在客戶端填充此字段,例如對於'created_at'類型字段,因爲我想要在服務器端創建記錄的確切時間。創建記錄可能會被延遲或排隊或重試暫時的問題,並且如果該字段在客戶端填充,則該值實際上不會反映在服務器端創建的時間。 – russoue