2016-09-15 27 views
0

我有一個MongoDB數據庫和2個集合:programsexercises。裏面programs集文檔有一個包含ID的字符串表示的exercisesexercises表,這樣的:有沒有辦法在一個查詢中使用MongoDB將_id的數組映射到文檔中?

{ 
    "_id" : ObjectId("57da8f955cf29df682932ee9"), 
     "exercises" : [ 
      "57da8e01d0649e646afaea4e", 
      "57da8e01d0649e646afaea4e", 
      "57da8e01d0649e646afaea4e" 
     ] 
} 

我需要這個陣列的ID映射到相關exercises對象數組。事情是,我需要按照精確的順序,包括重複。就像在之前的文檔中一樣,它包含3個指向相同的exercise的鏈接,我需要獲得3個相同的exercise作爲響應。

現在我使用此查詢:

db.collection("exercises").find({_id: {$in: exercises.map(exid => ObjectID(exid)) }}).toArray() 

該查詢返回的每exercise我的需要,但在錯誤的秩序,沒有重複。

我可以使用MongoDB在一個查詢中實現這樣的結果嗎?我知道我可以做這樣的事情(沒有測試,只是作爲一個例子):

exercises.map(exid => db.collection("exercises").find({id: ObjectID(exid)}); 

像這樣的東西應該給我的陣列我需要的,但我想這是不正確的方式做它,做一個單獨的查詢得到一個特定的exercise

P.S.我知道我可以存儲exercises文檔本身,不使用外部exercises集合爲,但事情是,一些program S可指同一exercise,這就是爲什麼我覺得我需要爲這個外部集合。

回答

0

我決定從服務器獲取所有exercises的查詢,然後我所有的ID從這個數組從服務器映射到值。這樣的:

db.collection("exercises") 
    .find({_id: {$in: g.exercises.map(exid => ObjectID(exid)) }}) 
    .toArray() 
    .then(res => g.exercises.map(exid => res.find(exs => exs._id == exid))) 

這個查詢的說明:

  • (使用MongoDB的$in運營商)
  • 將其轉換爲陣列
  • 地圖中的每個獲得所有exercises與服務器對應的ID數組所述g.exercises陣列陣列的從服務器(res)的元件的元件,其中ID是相同的請求

這是1個查詢請求所有我需要的數據。

希望它能幫助別人。

相關問題