재귀 쿼리가 성능에 미치는 영향에 대해서는 확신 할 수 없지만 이와 같은 것이 작동해야합니다. 그것은 쿼리에서 마지막 속성을 제거하고 일치하는 항목이없는 경우 다시 시도합니다
var AnimalSchema = new mongoose.Schema({
atype: { type: String },
color: {type:String},
pattern: {type:String},
size : {type:String}
});
var Animal = mongoose.model('Animal',AnimalSchema);
//test data
//var dalmation = new Animal({
// atype:'dog',
// color: 'black and white',
// pattern: 'spots',
// size: 'big'
//});
//dalmation.save(function(err){
// var yorkie = new Animal({
// atype:'dog',
// color:'brown',
// pattern:'mixed',
// size:'small'
// });
// yorkie.save(function(yer){
// bestMatch({'atype':'dog','size':'big','color':'brown'},function(err,animal){
// console.log(err,animal);
// })
// });
//});
function bestMatch(params,cb){
Animal.findOne(params,function(err,animal){
if (err || !animal){
var keys = Object.keys(params);
if (keys.length){
delete params[keys.pop()];
bestMatch(params,cb);
}else{
cb('No matches',null);
}
}else{
cb(null,animal);
}
});
}
bestMatch({'atype':'dog','size':'big','color':'brown'},function(err,animal){
console.log(err,animal);
});
집계 프레임 워크를 사용하여 필드를 일치시키고 일치 항목의 개수 (점수)를 유지 한 다음 정렬 할 수 있습니다 (http://docs.mongodb.org)./manual/tutorial/aggregation-examples /). (그리고, 당신은 기본적으로 '재귀 적 쿼리'를 할 수 없습니다.) – WiredPrairie