2016-08-21 71 views
0

我在mongo上有一個名爲「reports」的集合,它有客戶評論和討論的能力。

這裏是「討論」陣列看起來像在每個報告:

"discussions" : [ 
    { 
     "user_id" : "david", 
     "timestamp" : ISODate("2016-03-17T01:15:00Z"), 
     "comment" : "I was wondering, did anyone else find it interesting?", 
     "replies" : [ 
      { 
       "user_id" : "kevin", 
       "timestamp" : ISODate("2016-03-17T01:15:00Z"), 
       "comment" : "Not really" 
      } 
     ] 
    } 
] 

由於每個評論經常更改上述用戶所顯示的信息,我想用引用和拉他們的信息「用戶「集合的基礎上,而不是將其信息嵌入到每個討論帖中。 我希望能夠靈活地分割整個數據庫,因此「$ lookup」可能是不可行的(因爲如果我理解正確,「$ lookup」中的「from」字段不能被分割)。

因此,我想建立一個「$或」查詢,將類似於下面的SQL:

SELECT * FROM USERS WHERE id IN ('david', 'kevin') 

,這將拉動從用戶收集其他用戶信息,然後用它們組合起來其餘的應用程序級別的評論細節。

因此,我推送find()的查詢是由應用程序通過迭代「reports」結果並提取「user_id」來構建的。 這是查詢的var_dump的樣子:

array(1) { 
    ["$or"]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     ["_id"]=> 
     string(4) "david" 
    }, 
    [1]=> 
    array(1) { 
     ["_id"]=> 
     string(4) "kevin" 
    } 
    } 
} 

但是,它似乎並不如我沒有得到任何結果,儘管其在數據庫中的用戶的工作。 注意:「users」集合中的用戶的_id是用戶名。

我在做$或查詢不正確(我在文檔中看到的是'$ or'在不同的字段上執行)? 有沒有更好的方法來完全解決這個問題? 在此先感謝!

回答

0

您應該爲此使用查詢。在mongo語法中:

db.users.find({ "_id" : { $in : [ "david", "kevin" ] } }) 
相關問題