node.js - Mongodb 找到最佳匹配

标签 node.js mongodb mongoose recommendation-engine

我想构建一个查询,返回数据库中最匹配的文档。

即我想查找包含以下字段的文档 - “动物”:“狗” “颜色”:“棕色” “图案”:“点” “尺寸”:“小”

如果没有包含上述所有字段及其对应值的文档,我希望查询返回最佳匹配。 f.e {"animal":"dog", "color":"brown", "size":"small"}

我可以在 mongo db 中实现递归查询吗?如果是这样,如何? 我应该使用 mapReduce,如果是,如何使用? 人们可以将这个问题更多地看作是一个推荐系统问题,就像我想推荐最适合给定值的项目(文档)一样,如果有人知道实现上述内容的好方法,我将不胜感激

我正在使用 mongodb mongoose 和 nodejs。

谢谢。

最佳答案

我不确定递归查询对性能的影响,但这样的事情应该可行。它从查询中删除最后一个属性,如果未找到匹配项,则重试:

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);
});

关于node.js - Mongodb 找到最佳匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863141/

相关文章:

mongoose - 对象 ID 为空的 Mongoose 查询?

mongodb - 蒙哥错误: server does not support collation

node.js - 事件驱动设计工具

mysql - Node.js 中的 session 存储首选项

javascript - ( Node :6868) [DEP0062] DeprecationWarning: `node --inspect --debug-brk` is deprecated

javascript - 双击以编辑 Meteor 应用程序中的元素

mongodb - 运行 app.js 时 Nodejs-mongoose-0.0.5 错误

node.js - NodeJS - fork 进程(1 个虚拟机,多个处理器)VS 多个虚拟机,1 个进程

node.js - 在 puppeteer 中评估后给予超时无效

mongodb - 在 Windows 7 [32 位] 中启动 MongoDB 时出错