我正在使用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);
}
}
});
在这个示例中,我并没有真正查询数据库,只是获取整个表并自己过滤结果。这是唯一的方法,还是我可以直接查询数据库?
答案 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将全部处理。
您可以在请求网址
中发送IDlocalhost: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"]);
再次使用上面的代码进行排队。
希望这有帮助。