2017-01-02 2 views
0

Ich baue eine App mit AngularJS und dem MEAN Stack und frage mich, ob es möglich ist, mit der $ resource factory eine MongoDB-Datenbank nach einer Reihe von Zeilen mit einem bestimmten Wert in einer ihrer Spalten abzufragen.

Zum Beispiel, wenn ich eine Todo App erstellen wollte, und ich hatte eine Tabelle mit einer Spalte mit einem Personen Benutzernamen und eine Spalte mit einer Zeichenfolge, die eine Erinnerung hatte, ist es möglich, die Datenbank für alle Zeilen abzufragen Haben Sie einen bestimmten Benutzernamen in der Spalte Benutzername? Oder mache ich etwas zu tun haben:

Todo.service.ts:

export function TodoResource($resource) { 
    'ngInject'; 
    return $resource('/api/todo/:query', { 
     id: '@_id' 
     query: ''; 
    }); 
} 

app.js

var list = []; 
this.Todo.query().$promise.then((data) => { 

     for(let datum of data){ 
      if(datum.userName == email){ 
       list.push(datum); 
      } 
     } 
    }); 

In diesem Beispiel Fall bin ich nicht wirklich die Abfrage Datenbank, nur um die gesamte Tabelle zu bekommen und die Ergebnisse selbst zu filtern. Ist dies der einzige Weg, oder kann ich die Datenbank direkt abfragen?

+0

Nicht vom vorderen Ende direkt. Eine Datenbankabfrage muss mit serverseitigem Code erfolgen. Das Frontend verwaltet nur, was die Serverseite zurückgibt – charlietfl

Antwort

1

Wenn Sie NODE und MongoDB verwenden, müssen Sie Mongoose verwenden.

Zu diesem Zweck ist es besser, Daten auf Server-Filter nicht auf den Client, wie es wäre - die Menge der Daten im Netzwerk verringern - unerwünschte Daten verhindern

auch an den Client gesendet werden, wenn Sie nicht wollen, manuell um die Daten auf dem Server mit einer Funktion zu filtern, gibt es eine Funktion in Mungo

var query = collection.find({_id: '001'}); 
query.exec(function (err, results) { 
    if (err) { 
     res.json(err); 
    } 
    if (results) { 
     res.json(results); 
    } 
}); 

diesen Filter in der Abfrage es mongodb vor der Ausführung hinzuzufügen, und holen wird nur Datensätze mit

id= 001; 

heißt gefilterten Daten

Damit Sie keine Daten manuell filtern, MongoDB alles behandelt.

Sie können

localhost:8080/collectionName/001 

auf NODE-Server die ID in der Anfrage-URL senden:

function (req, res) { 
    var mainUrl = req.url.split("/"); 
    if (mainUrl.length > 2) { 
     query = collection.find({_id: mainUrl[2]}); 
    } else { 
     query = collection.find(); 
    } 
    query.exec(function (err, results) { 
     if (err) { 
      res.json(err); 
     } 
     if (results) { 
      res.json(results); 
     } 
    }); 
} 

Sie können auch Ihre url machen wie:

localhost:8080/collectionName?id='001' 

dann auf dem Server:

var url_parts = url.parse(req.url, true); 
var queryFactors = url_parts.query; 
var id= JSON.parse(queryFactors["id"]); 

und den obigen Code erneut für Queering verwenden.

Hoffe, das hilft.

Verwandte Themen