2016-03-18 11 views
7

staramy się dopasować obiekt _id do mdłego obcego pola, który nie działa. poszukuje dokumentów mondodb. oni nie mają nic na ten temat. Czy jest to możliwe z zapytaniem mongodb, czy nie?Zapytanie mongodb za pomocą obiektu _id w lookup localField

_id jako obiekt w dokumencie

"_id" : ObjectId("56ab6663d69d2d1100c074db"), 

MID jako ciąg w dokumencie

"mId" : "56ab6663d69d2d1100c074db", 

kwerendy jak poniżej:

collection.aggregate([ 
       { 
        $lookup: 
        { 
         from: "category", 
         localField: "_id", 
         foreignField: "mId", 
         as: "categories" 
        } 
       } 
      ]) 

UDPATE

jako podsumowanie, mongodb nie obsługuje typu przymusu w $ lookup. więc potrzebuję powyżej pracy, muszę mieć _id i mId jako ObjectId wpisz w samych dokumentach, aby działało.

+0

Co jest 'mId'? Jeśli jest to również ObjectId, powinno działać poprawnie. – BatScream

+0

to obecnie nie jest ObjectId. więc musimy ustawić klucze obce jako ObjectId, aby to zadziałało? – jit

+0

To nie jest wymagane. Operator '$ lookup' działałby tak długo, jak' localField === foreignField'. Zwróć uwagę, że 'strict' jest równy. – BatScream

Odpowiedz

0

Możesz dołączyć identyfikator z mid.Though $ odnośnika nie obsługuje przymus, użyj $ projektu fazę realizacji i najpierw przekonwertować wszystkie połowy do ID obiektu, a następnie spróbuj $ odnośnika

+0

i jak ewentualnie możemy dokonać konwersji z ciągu na identyfikator obiektu wewnątrz agregacji ?? –

+1

Trochę późno do partii, ale dodanie tego etapu projektu do agregacji powinno działać: {$ projektu: { _id: "$ _id"} }: {$ toObjectId} operatora – ashe540

+1

ashe540, nie ma "$ toObjectId" . –

Powiązane problemy