2016-02-28 58 views
0

請在下面找到

db.collection('documents').aggregate([ 
    { 
     $lookup: 
     { 
      from: 'pages', 
      localField: '_id', 
      foreignField: 'document_id', 
      as: 'pages' 
     } 
    }]) 

的代碼片段,請在下面找到與對應配對樣本頁面樣本文檔對象

SAMPLE DOCUMENT : 

{"_id":"56d6b5c33bde388c1036216f","offername":"testoffer1", "details":{...} } 

SAMPLE PAGE : 

{ "_id":"23235c3sdsdc8c1036216f", "document_id":"56d6b5c33bde388c1036216f", "details":{} } 

我想使用頁面集合中的document_id字段將頁面分組到各個文檔中,以與Object Id中的documents集合進行映射。但是,儘管存在匹配的數據,但是我們仍然爲頁面獲取空數組但是,如果我將文檔集合的對象ID更改爲某個其他變量以匹配頁面集合,它就可以工作。有人可以幫忙嗎?我假設它與對象ID有關。

+0

您可以發佈一個文件和一個網頁對象中具有相應的ID?另一個想法是:在document_id字段中的值是否爲ObjectId(...)對象,而不僅僅是字符串? – Christoph

+0

@Christoph是的document_id字段中的值是真的ObjectId()對象,因爲我沒有做任何明確的類型轉換。我曾嘗試'_id'.toString(),'_id'.valueOf(),但仍然未解決,已更新有問題的示例對象。 – Jay

+0

@Christoph然而,我管理一個解決方法,我必須根據算法生成字母數字鍵,並將其存儲在文檔對象中的'offer_id'屬性中,並將其用於與相應頁面進行匹配。這工作正常。我想問題是與數據類型MongoDB對象ID。將等待收到你的消息。感謝您的時間。 – Jay

回答

0

我測試你的代碼和數據如下,似乎他們都是好的。

案例1,與ObjectId

> db.documents.find() 
{ "_id" : ObjectId("56d6f0cfe1c528593e02435d"), "offername" : "testoffer1" } 
> db.pages.find() 
{ "_id" : ObjectId("56d6f10ce1c528593e02435e"), "document_id" : ObjectId("56d6f0cfe1c528593e02435d") } 

> db.documents.aggregate([ 
       {$lookup: { 
         from:'pages', 
         localField: '_id', 
         foreignField: 'document_id', 
         as :'pages'}}]) 
{ "_id" : ObjectId("56d6f0cfe1c528593e02435d"), "offername" : "testoffer1", "pages" : [ { "_id" : ObjectId("56d6f10ce1c528593e02435e"), "document_id" : ObjectId("56d6f0cfe1c528593e02435d") } ] } 

個案2中,_id類型爲String相同的問題

> db.documents.find() 
{ "_id" : "56d6b5c33bde388c1036216f", "offername" : "testoffer1" } 
> db.pages.find() 
{ "_id" : ObjectId("56d6f2d4e1c528593e02435f"), "document_id" : "56d6b5c33bde388c1036216f" } 

> db.documents.aggregate([ 
       {$lookup: { 
         from:'pages', 
         localField: '_id', 
         foreignField: 'document_id', 
         as :'pages'}}]) 

{ "_id" : "56d6b5c33bde388c1036216f", "offername" : "testoffer1", "pages" : [ { "_id" : ObjectId("56d6f2d4e1c528593e02435f"), "document_id" : "56d6b5c33bde388c1036216f" } ] } 
+0

但是它不會爲我檢索頁面。也許我們可以在你有空的時候做一個屏幕共享,看看你做得有多不同。 – Jay

+0

@Jay,請給出您的正確數據,並將其添加到您的問題。我可以在我的本地測試它。 – zangw

+0

你可以添加我的Skype。讓我們脫機。 – Jay