2015-05-19 50 views
0

我正在使用MEAN堆栈来构建Web应用程序。我想基于我的控制器中的参数通过ObjectId过滤来自服务器的数据。我的参数适用于键值,例如按名称过滤,但通过ObjectID过滤不起作用。我正在使用MongoJS和Mongojs.ObjectID。在链接到角度控制器的服务器中使用“Mongojs.ObjectID”

Controller.js:

var refresh = function() { 
    $http.get('/collection', {params:{"_id":"111100000111"}}).success(function(response) { 
     console.log("Success"); 
     $scope.collection = response; 
    }); 
}; 

refresh(); 

Server.js:

app.get('/collection', function(req,res){ 
    if(req.query.id){ 
    db.users.find({_id: mongojs.ObjectId(req.query.id)},function (err, docs) { console.log(docs); res.json(docs); }); 
    } 
    else{ 
    db.users.find(function (err, docs) { console.log(docs); res.json(docs); }); 
    } 
}); 

由于服务器端函数运行为的if-else, “如果” 的失败的情况下,它会转到“其他”,它将带回所有文档。我已经尝试了几乎所有在“id”之前添加“_”并添加/删除“id”或“_id”引号的组合。不同的组合已经带回了“null”,一个空的数组,或者去了“else”语句。

回答

0

您将通过_id作为查询参数。

因此,这是您的GET请求是什么样子:
/集_id = 111100000111

但是你在你的if语句和find函数内部看id而不是_id

因此,它应该是这样的:

app.get('/collection', function(req,res) { 
    var _id = req.query._id; 
    if(_id) { 
     db.users.find({_id: mongojs.ObjectId(_id)},function (err, docs) { console.log(docs); res.json(docs); }); 
    } 
    else { 
     db.users.find(function (err, docs) { console.log(docs); res.json(docs); }); 
    } 
}); 
+0

这个完美工作。谢谢! – mjoyce91

相关问题