2015-07-04 7 views
7

Mam model z wieloma właściwościami. Jednym z nich jest pole o nazwie "developerId", które zawiera ciąg znaków, który ma taką samą długość i charakterystykę jak obiekt MongoDB ObjectId (w rzeczywistości jest to stringID ObjectID).Właściwość ciągu Loopback MongoDB przekonwertowana do ObjectId podczas używania Znajdź gdzie klauzula

Kiedy wysyłam zapytanie do modelu za pomocą metody find() w Node.js, zapytanie jest aktualizowane przed jego wykonaniem, a wartość "developerId" jest konwertowana na identyfikator obiektu, który następnie nie pasuje do żadnych ciągów w bazie danych, ponieważ są łańcuchami, a nie obiektami.

{where: {developerId: '55118c5fc921fa170f05080b'}} 

jest przekształcany do:

{where: {developerId: ObjectId('55118c5fc921fa170f05080b')}} 

pole nie jest polem id, jest określony jako typ: 'string' w definicji modelu json.

Jak wyłączyć to zachowanie automatycznego identyfikatora obiektu, aby mieć kontrolę nad zapytaniami Loopback?

Odpowiedz

4

Wygląda na to, że wykryto błąd/usterkę frameworka. Zobacz tutaj:

https://github.com/strongloop/loopback-connector-mongodb/issues/52

Błąd wydaje się być nadal nierozwiązany jak dwa miesiące temu. Witamy na dzikim zachodzie, który może być rozwinięciem węzła.

Możesz rozwidlić i zhakować moduł w krótkim czasie, pracując ze społecznością, aby rozwiązać ten problem.

Możesz także spróbować użyć bazowego połączenia mongo, aby utworzyć zapytanie, a następnie odwzorować je z powrotem na obiekty pętli zwrotnej. Możesz to zrobić tak:

app.models.User.dataSource.connector 

Przypuszczam, że zawsze możesz zmienić pole developerID na model, aby był rzeczywistym ObjectId.

0

upewnić się w swoich właściwościach pliku JSON developerId jest zdefiniowana jako obiektu próbki:

"Properties" { 
... 
    "developerId": { 
     "type": { 
     "required": true 
     } 
    } 
... 
} 
+1

Dzięki za odpowiedzi, ale nie sądzę, że rozumiesz problemu. Pole zostało już zdefiniowane w modelu. Problem polega na automatycznej konwersji z ciągu znaków na ObjectId, co w tym przypadku jest niepożądane. –