2017-08-09 74 views
-1

你好我想在MongoDB更新從string格式我所有的JSON文件(「週五5月20日9點54分13秒+0000 2016」),以一個ISODate格式(YYYY-MM -DH HH:MM:SS)。爲了做到這一點,我使用了子串和自制功能。這工作正常,我看到控制檯翻譯它應該是。MongoDB的更新字符串到日期不起作用

但是,當我更新記錄,我看到更新不起作用。我能做些什麼來使它工作。

很多謝謝。

樣品JSON文件

{ 
    "_id" : ObjectId("573edec6ac5e621961f963f2"), 
    "contributors" : null, 
    "truncated" : false, 
    "text" : "Namens de verenigde marathonschaatsteams: gefeliciteerd @KNSB, @KPN en @Versteegen met het blijvend verbinden van schaatsend Nederland!", 
    "is_quote_status" : false, 
    "in_reply_to_status_id" : null, 
    "id" : NumberLong("733596684547018752"), 
    "favorite_count" : NumberInt("0"), 
    "source" : "<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>", 
    "timestamp_ms" : "1463738053820", 
    "in_reply_to_screen_name" : null, 
    "id_str" : "733596684547018752", 
    "retweet_count" : NumberInt("0"), 
    "in_reply_to_user_id" : null, 
    "favorited" : false, 
    "geo" : null, 
    "in_reply_to_user_id_str" : null, 
    "lang" : "nl", 
    "created_at" : "Fri May 20 09:54:13 +0000 2016", 
    "filter_level" : "low", 
    "in_reply_to_status_id_str" : null, 
    "place" : null 
} 

在試手創樂團基礎上的評論對這個解決方案的建議:

Multiply field by value in Mongodb

更新腳本Mongobooster

db.eval(function() { 
    db.STG_LEADS_AUTOSCHADE.find().forEach(function(e) { 
     e.created_at = new Date(e.created_at); 
     db.collection.save(e); 
}); 

});

結果

WARNING: db.eval is deprecated 

enter image description here

但結果是,created_at字段沒有更新,仍然是一個字符串。

+0

並將單據解決這個問題目前看起來像究竟是什麼?如果「不起作用」,您的代碼並不能完全幫助我們「逆向工程」。不知道'.updateupdate'是什麼,並且看起來像一個錯字,無論是在您的文章還是您的實際代碼中,這都是對「不起作用」的解釋。如果你需要幫助,你需要更具體地瞭解什麼是不工作,並提供足夠的信息,以便其他人可以提供幫助。 –

+0

感謝您的快速回復 - 祝賀Lunn。我用json文檔的一個例子改進了我的問題,並刪除了輸入錯誤 –

+0

對我來說'new Date(「Fri May 20 09:54:13 +0000 2016」)'''ISODate(「2016-05-20T09:54 :13Z「)'這似乎是正確的,你真的需要做的。不是嗎? –

回答

0

Eventualy是通過創建一個循環(的forEach)

db.STG_LEADS_AUTOSCHADE.find().forEach(function(e){ 
    var d = e.created_at 
    db.STG_LEADS_AUTOSCHADE.update({_id: e._id},{$set{created_at: new Date(d)}}) 
})