2016-07-12 25 views
3

Ich habe eine sehr ähnliche Frage zu SO in der Vergangenheit gestellt, aber ich kämpfe mit diesem.Sails.js - Blueprint-Abfrage nach, wenn Eins-zu-Viele-Asscoization existiert

Meine vorherige question war eine One-to-One-Blueprint/Waterline-Abfrage, dies ist jedoch eins zu viele.

Ich habe eine sails.js App mit einer Mongo DB. Ich habe zwei Modelle/Kollektionen, die eine Eins-zu-Viele Beziehung haben.

die zum Beispiel folgende Nehmen, 3 media Artikel, eine, wenn davon 2 Titel mit ihm verbunden hat ...

[ 
    // media item 1 
    { 
    "titles": [ 
     { 
     "name": "BOARDWALK1", 
     "createdAt": "2016-07-12T12:12:37.946Z", 
     "updatedAt": "2016-07-12T21:34:10.879Z", 
     "media": "5784debe3ad51e3422887bab", 
     "id": "5784deb53ad51e3422887ba8" 
     }, 
     { 
     "name": "BOARDWALK3", 
     "createdAt": "2016-07-12T12:12:42.980Z", 
     "updatedAt": "2016-07-12T20:59:05.054Z", 
     "media": "5784debe3ad51e3422887bab", 
     "id": "5784deba3ad51e3422887baa" 
     } 
    ], 
    "name": "DEF234.mxf", 
    "createdAt": "2016-07-12T12:12:46.490Z", 
    "updatedAt": "2016-07-12T12:40:08.328Z", 
    "mediaInfo": { 
     "blah": 123 
    }, 
    "id": "5784debe3ad51e3422887bab" 
    }, 

    // media item 2 
    { 
    "titles": [], 
    "name": "ABC123.mxf", 
    "createdAt": "2016-07-12T12:12:49.448Z", 
    "updatedAt": "2016-07-12T12:37:55.757Z", 
    "id": "5784dec13ad51e3422887bac" 
    }, 

    // media item 3 
    { 
    "titles": [], 
    "name": "GHR87635.mxf", 
    "createdAt": "2016-07-12T21:05:20.716Z", 
    "updatedAt": "2016-07-12T21:05:20.716Z", 
    "id": "57855b90f2d7713e22cdf17f" 
    } 
] 

Ich möchte (mit Plan, dh REST Anrufe) zur Abfrage für alle Artikel ohne Titel mit ihnen verbunden.

zu finden, wo ein Verein existiert, die Sie tun können ...

POST http://localhost:1337/media/find

{ 
    "where" : { 
     "title" : { 
      "!" : null 
     } 
    } 
} 

... aber ich bin zu kämpfen, einen Weg von Abfragen, das Gegenteil zu finden, wo keine Verbindung existiert , wie WHERE media.titles.length === 0

Jede Hilfe wird sehr geschätzt.

Antwort

1

Sie haben die richtige Idee zu überprüfen, ob das Array Null Länge ist. Die Verwendung der Operation POST zur Durchführung einer Suchoperation ist jedoch schlecht. In Blueprint-Routen RESTful Sails.js sollte POST nur für Erstellungsaktionen verwendet werden. GET sollte für Abfragen verwendet werden.

könnten Sie versuchen, die * parameter mit einer Abfrage wie folgt zu konstruieren:

GET http://localhost:1337/media?titles.length<1

Da ich nicht Ihre speziellen API testen können, habe ich die oben genannten Arbeiten bin der Hoffnung. Es kann geringfügige Anpassungen erfordern, um es zum Laufen zu bringen. Es kann hilfreich sein, eine App wie Postman zum Testen von Abfragezeichenfolgen zu verwenden.

Aus architektonischer Sicht möchten Sie möglicherweise die Nullwerte entfernen, als Referenz siehe Google JSON styleguide.

Wenn eine Eigenschaft ist optional oder einen leeren oder Null-Wert, betrachten die Eigenschaft aus dem JSON fallen, es sei denn, es eine starke semantische Grund für seine Existenz ist.