iT邦幫忙

0

將MongoDB中的時間資料轉為ISOdate

各位大神好,這邊想請問一下sql語法上的問題,以下是我資料庫目前的資料型態:
https://ithelp.ithome.com.tw/upload/images/20210905/20141403Lk4jkblz8x.png
我想將其中time的欄位改成ISOdate的形式如下圖中的updateAT欄位:
https://ithelp.ithome.com.tw/upload/images/20210905/20141403JdlApKMjE2.png
而以下是我的code部分:
https://ithelp.ithome.com.tw/upload/images/20210905/20141403v65cMYRGHW.jpg
她顯示成功執行但是改動了0項資料,請問要如何處理?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
阿派
iT邦新手 4 級 ‧ 2021-09-05 01:28:52
最佳解答

你可以試試看 $dateFromString

看更多先前的回應...收起先前的回應...

這邊可以正確修改了,但想再問一下要如何儲存修改過後的結果?

修改完後如下圖https://ithelp.ithome.com.tw/upload/images/20210905/20141403zJYsE4SlYC.png
,但回頭看db時卻仍不變:
https://ithelp.ithome.com.tw/upload/images/20210905/20141403FWwtA4a54L.png

阿派 iT邦新手 4 級 ‧ 2021-09-05 14:29:47 檢舉
  1. $project 只有呈現沒有修改

  2. 範例

db.time.test.updateOne(
{ },
[ 
{
  $set: 
    { 'newField': 
        { $dateFromString:  { dateString: '$stringTime'}  } 
    } 
}
] )

自己改一下你的欄位和條件就好,我沒覆蓋原本欄位是方便你看改變的過程。

完整記錄:

film> db.time.test.find()
[
  {
    _id: ObjectId("613462de924cfb987f3ce223"),
    stringTime: '2020-05-13 10:16:00',
    newField: ISODate("2020-05-13T10:16:00.000Z")
  }
]
film> db.time.test.updateOne(
... { },
... [
... {
.....   $set:
.....     { 'newField':
.......         { $dateFromString:  { dateString: '$stringTime'}  }
.......     }
..... }
... ] )
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}
film> db.time.test.find()
[
  {
    _id: ObjectId("61346311924cfb987f3ce224"),
    stringTime: '2020-05-13 10:16:00',
    newField: ISODate("2020-05-13T10:16:00.000Z")
  }
]

抱歉再問幾個問題:
1.所以如果要一次修改資料庫中所有的time欄位就是把updateone改成update對嗎?
2.'newField'改為我的欄位,然後其他不變動對嗎?
抱歉我真的是sql的小白QQ

阿派 iT邦新手 4 級 ‧ 2021-09-05 15:14:03 檢舉

建議改使用 updateManyupdateOne

update 不見得所有環境都支援

謝謝大神您清楚又耐心的講解,已設為最佳答案,感謝您!!!!

我要發表回答

立即登入回答