如何使用 AngularJS 的 $resource 工厂查询数据库中的一组特定行?

How do I query a database with AngularJS's $resource factory for a specific set of rows?

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

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

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

在这个示例案例中,我并没有真正查询数据库,只是获取整个 table 并自行过滤结果。只能这样吗,还是可以直接查询数据库?

如果您正在使用 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 URL

localhost:8080/collectionName/001

在节点服务器上:

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

你也可以让你的url喜欢:

localhost:8080/collectionName?id='001'

然后在服务器上:

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

并再次使用上面的代码进行查询。

希望对您有所帮助。