我的数据库中有一个名为商家的集合。我想要做的是查询我的架构中定义的数据库和特定字段,而不是查询文档的所有字段。我认为这就是为什么架构首先存在的原因?
模式
var businessSchema = new mongoose.Schema({
custom_id: String,
name: String
});
module.exports = mongoose.model('Business', businessSchema);
快速
router.get('/query', function (req, res, next) {
res.type('json');
Business.find({custom_id: req.query.custom_id})
.then(function (data) {
res.send({data: data});
}).catch(function (err) {
return next(new Error(err.message || err));
})
});
响应
{
"data":[
{
"_id":"5a50ac105a0d8452b0e341e5",
"custom_id":"1",
"name":"Dave and Jane",
"status":"active",
"verified":true,
"created":1492727550760,
"email":{
"address":"dave_jane@whatever.com"
}
}
]
}
在架构中,我只有custom_id和name,但是我定义的任何字段(或者我都没有),Business.find
执行时会返回文档的所有字段。
与架构为空的行为相同,因此返回所有字段。
答案 0 :(得分:1)
在选择功能中,只需将您想要的字段设置为1,将您想要的字段设置为0.请参阅下文:
router.get('/query', function (req, res, next) {
res.type('json');
Business.find({custom_id: req.query.custom_id}).select({ "name": 1, "_id": 0})
.then(function (data) {
res.send({data: data});
}).catch(function (err) {
return next(new Error(err.message || err));
})
});
答案 1 :(得分:0)
我最后做的是为猫鼬模型制作一个静态方法,称为findBusinesses
而不是在我的路线中调用常规find
我调用静态方法,它自称查找,映射结果并返回。
这是代码
businessSchema.statics.findBusinesses = function (query) {
var deferred = Q.defer();
this.find(query, function (error, data) {
if (error) return deferred.reject(new Error(error));
var models = [];
data.forEach(function(e){
var b = {
custom_id: e.custom,
name: e.name,
phone: e.phone,
};
if(e.email) b.email = e.email.address;
models.push(b);
});
return deferred.resolve(models); // got it
});
return deferred.promise;
};
答案 2 :(得分:0)
您可以使用select
指定希望查询返回的字段。
来自Doc
指定要包含或排除的文档字段(也称为查询“投影”)
router.get('/query', function (req, res, next) {
res.type('json');
Business.find({custom_id: req.query.custom_id}).select({
name: 1,
profile_url: 1
}).then(function (data) {
res.send({data: data});
}).catch(function (err) {
return next(new Error(err.message || err));
})
});
1
表示该字段将被包含在内。 0
表示被排除在外。但不要混合两者。