使用:node / express / mongodb / mongoose
通过上面列出的设置,我创建了我的架构和模型,并可以根据需要进行查询。我想知道怎么做,将express request.query对象传递给mongoose中的Model.find()来匹配和查询嵌套文档的_id。在这种情况下,查询可能类似于:
http://domain.com/api/object._id=57902aeec07ffa2290f179fe
其中object是数据库中其他位置存在的嵌套对象。我可以轻松查询其他字段。 _id是唯一一个提出问题的人。它返回一个空的数组匹配。
可以这样做吗?
这是一个示例,而不是ACTUAL模式,但这可以解决这个问题。
let Category = mongoose.Schema({
name: String
})
let Product = mongoose.Schema({
name: String,
description:String,
category:Category
})
// sample category..
{
_id:ObjectId("1234567890"),
name: 'Sample Category'
}
// sample product
{
_id:ObjectId("0987654321"),
name:'Sample Product',
description:'Sample Product Description',
category: {
_id:ObjectId("1234567890"),
name: 'Sample Category'
}
}
所以,我正在寻找的是......如果我在快递中有以下内容......
app.get('/products',function(req,res,next){
let query = req.query
ProductModel.find(query).exec(function(err,docs){
res.json(docs)
})
})
这将允许我在查询参数中指定我想要的任何内容作为查询。所以我可以......
http://domain.com/api/products?name=String
http://domain.com/api/products?description=String
http://domain.com/api/products?category.name=String
我可以通过category.name查询,但我不能这样做:
http://domain.com/api/products?category._id=1234567890
这将返回一个空数组
答案 0 :(得分:0)
将您的查询更改为http://domain.com/api/object/57902aeec07ffa2290f179fe
并尝试
app.get('/api/object/:_id', function(req, res) {
// req._id is Mongo Document Id
// change MyModel to your model name
MyModel.findOne( {'_id' : req._id }, function(err, doc){
// do smth with this document
console.log(doc);
});
});
或试试这个
http://domain.com/api/object?id=57902aeec07ffa2290f179fe
app.get('/api/object', function(req, res) {
var id = req.param('id');
MyModel.findOne( {'_id' : id }, function(err, doc){
console.log(doc);
});
})
答案 1 :(得分:0)
别介意我觉得很荒谬。它就像我在上面发布的那样工作..在我的模式中修复了错误。