我有两个mongoose模型用户和请求。一个用户可以有多个请求。为了链接这两个数据模型,我在Request模型中引用了用户的objectID。但是,当我尝试获取特定用户ID的所有请求时,我无法获得任何结果。
用户
var UserSchema = new Schema({
name: String,
username: String
});
module.exports = mongoose.model('User', UserSchema);
请
var RequestSchema = new Schema({
type: String,
user_id: { type : mongoose.Schema.Types.ObjectId, ref: 'User'}
});
module.exports = mongoose.model('Request', RequestSchema);
以下是根据URL中传递的用户ID提取请求的示例代码
exports.getRequests = function (req, res, next) {
var userId = req.params.id;
console.log('USER ID'+userId);
Request.findOne({'user_id': 'kenan'}, function (err, request) {
if (err) return next(err);
if (!requests){
console.log('NO REQUEST FOUND');
return res.send(401);
}
res.json(request);
});
};
我知道我正在使用findOne,它会返回一个资源。然而,这是失败的,我没有得到任何结果。我在我的数据库中填充了数据。以下是获取请求的URL。
http://localhost:9000/api/V1/users/547ee1e82e47bb982e36e433/requests
请帮助建议我在这里做错了什么。
由于
答案 0 :(得分:1)
执行find()
后,您需要populate对用户的引用。
name
过滤请求
正在寻找。更新代码:
Request
.find().populate({'path':'user_id',match:{'name':'kenan'}})
.exec(function (err, resp) {
var result = resp.filter(function(i){
return i.user_id != null;
});
console.log(result);
})
答案 1 :(得分:0)
好的,上面的答案是正确的,谢谢你的回复。我错误地填充了我的Requests集合。这只适用于每一个人的其他知识。如果将对象ID引用作为集合中的某个字段,则确保插入ObjectID对象而不是仅插入数值。
<强>错误强>
{ "_id" : ObjectId("54803ae43b73bd8428269da3"), "user_id" : "547ee1e82e
47bb982e36e433", "name" : "Test", "service_type" : "test", "version" : "10"
, "environment" : "test", "status" : "OK", "__v" : 0 }
<强>正确强>
{ "_id" : ObjectId("54803ae43b73bd8428269da3"), "user_id" : ObjectId("547ee1e82e
47bb982e36e433"), "name" : "test", "service_type" : "test", "version" : "10"
, "environment" : "test", "status" : "OK", "__v" : 0 }