2017-08-17 87 views
1

我正在爲一個Web應用程序進行單元測試,我想做一個測試用例來查看當有人試圖獲取不可能存在的mongo文檔時,我的應用程序是否會發送相應的錯誤消息。在mongo中,是否有可能擁有一個看起來合法但不可能存在的_id?

爲了讓更多的情況下,Web應用程序發回有關基於關中蒙戈數據庫項目的_id某些項目的信息。用戶可以獲取任何項目的_id,因爲所有項目都可以向公衆查看。

我想知道的是,是有可能有可能在數據庫中查詢的_id,但它不可能存在嗎?

如果這是可能的話,我可以做一個測試情況下,將查詢蒙戈分貝和每一個保證時間發回相應的錯誤信息。現在,我正在使用分配給不再存在的項目的mongo _id。

我給這_id要求是:

  • 1)它必須是一個正常_id
  • 2)它必須是 作爲_id相同的字符組成的相同的長度(十六進制我假設)
  • 3)它實際上可能永遠不會是一個真正的_id,mongo將分配給一個 文檔。

其值得注意的是,用戶在創建項目時永遠不能分配_id。所有_id任務正在由mongo處理。

如果它適合所有上述我會很高興。

他們只我能想到的事情是000000000000000000000000,但我不能確認這是否可以作爲一個_id或不?

回答

1

但是,出於某種原因,蒙戈將永遠無法來指派_id

您需要區分「的MongoDB將永遠不會生成此ID」和「如果我們提供的MongoDB永遠不會接受這個ID它」。

對於前者,您的全零對象ID示例沒有問題。 MongoDB中絕不會產生這樣一個id(因爲時間戳生成規則,如果沒有別的)

如果是後者,這是不可能的。一個mongo對象id基本上是一個12字節的二進制blob,沒有無效值或限制值。所有的值都是有效的。

還要注意的是_id領域可以採取最任意值:字符串,數字,對象ID,對象,什麼具備的,你。數組除外。

+0

嗨塞爾吉奧,謝謝你的答案。我現在已經更新了這個問題。在這種情況下,我更關心後者。知道mongo如何分配_id確實有助於爲我的測試用例提供一個_id。我真正想要的是一個_id,我可以在我的奶嘴中使用它,它總是會帶回我的錯誤消息:「帶有_id的項目沒有。」。如果_id由時間戳確定,則全零_id應該覆蓋這個。 –

+0

@DavidOGrady「但它永遠不可能存在?」 - 再次,不要混淆這兩種情況。這個ID絕對可以存在(如果你明確插入)。只是MongoDB本身不會生成它。只要確保你明白這個區別。 –

+0

在Web應用程序中,當用戶嘗試創建項目時,用戶不能分配_id,因此我們不必擔心顯式插入_id。感謝您的跟進。 –

相關問題