簡體   English   中英

用貓鼬操縱createdAt字段

[英]Manipulate createdAt field with mongoose

出於測試目的,我想控制createdAt在我的MongoDB的對象字段。 不幸的是,我擔心使用標准時間戳實現是不可能的。 這是我用來創建一些對象然后設置其創建的時間戳的代碼的要點:

const docArray = [];
const times = [15, 32, 1233, 122].map(seconds => moment().add(seconds, 'seconds'));

for (let i = 0; i < times.length; i += 1) {
  // Create an object
  docArray.push(await createObj(`${i}`));

  const doc2update = await MyModel.findById(docArray[i]._id);
  // Save the original created date
  const org = doc2update.createdAt;

  // Do the update
  doc2update.createdAt = times[i];
  doc2update.save(); // tried doc2update.update() without change

  // Retrieve the updated object
  docArray[i] = await TaskModel.findById(docArray[i]._id);

  // Check if change preserved
  console.log(docArray[i].createdAt - org,
              'vs expected',
              doc2update.createdAt - org);
}

輸出相當令人失望

0 'vs expected' 14841
0 'vs expected' 31809
0 'vs expected' 1232787
0 'vs expected' 121762

我猜想不建議常規使用這種方式創建的操作,但是在測試時會很方便。 有沒有解決的辦法?

您可以使用mongoose操縱時間戳記 ,就像文檔中的任何其他值一樣。

您的測試失敗,因為.save()是異步函數,您還應該等待它完成。

await doc2update.save();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM