如何使用AngularJS的$ resource工厂为特定的行集查询数据库?

时间:2017-01-02 02:55:03

标签: angularjs node.js mongodb web mean-stack

我正在使用AngularJS和MEAN Stack构建应用程序,并且想知道是否可以使用$ resource工厂向MongoDB数据库查询一组在其中一个中具有特定值的行列。

例如,如果我想构建一个Todo应用程序,并且我有一个包含人员用户名的列和一个带有提醒字符串的列的表,是否可以在数据库中查询所有行在用户名栏中有一个特定的用户名?或者,我必须做这样的事情:

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);
            }
        }
    });

在这个示例中,我并没有真正查询数据库,只是获取整个表并自己过滤结果。这是唯一的方法,还是我可以直接查询数据库?

1 个答案:

答案 0 :(得分:1)

如果您使用的是NODE和MongoDB,那么您必须使用Mongoose。

为此目的,最好过滤服务器上的数据而不是客户端上的数据   - 减少网络上的数据量   - 防止将不需要的数据发送到客户端

另外,如果你不想用一个函数手动过滤服务器上的数据,那么mongoose中就有一个函数

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

这将在执行之前将查询中的过滤器添加到mongodb,并且仅获取具有

的记录
id= 001;

即。过滤数据

通过这种方式,您不必手动过滤数据,MongoDB将全部处理。

您可以在请求网址

中发送ID
localhost:8080/collectionName/001
在NODE服务器上

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);
        }
    });
}

您还可以将您的网址设为:

localhost:8080/collectionName?id='001'

然后在服务器上:

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

再次使用上面的代码进行排队。

希望这有帮助。