Node.js sailsjs水线搜索分为两个表

Node.js sailsjs水线搜索分为两个表,node.js,sails.js,waterline,sails-mongo,Node.js,Sails.js,Waterline,Sails Mongo,sailsjs waterline将从一个表中搜索像“%sam%”这样的名称和从另一个表中搜索像“%nike%”这样的产品名称结合起来,并留下join以获取用户方面的数据。我知道在mongo没有左路球员,但如何做到这一点。我正在使用mongodb waterline的.find()查询是异步的(事实上,所有nodeJS/sailsJS任务都是异步的),这意味着您不能保证User.find()在Product.find()之前返回 您需要使用(sails.js中的默认库)执行嵌套查询或使用承诺您

sailsjs waterline将从一个表中搜索像“%sam%”这样的名称和从另一个表中搜索像“%nike%”这样的产品名称结合起来,并留下join以获取用户方面的数据。我知道在mongo没有左路球员,但如何做到这一点。我正在使用mongodb


waterline的.find()查询是异步的(事实上,所有nodeJS/sailsJS任务都是异步的),这意味着您不能保证User.find()在Product.find()之前返回


您需要使用(sails.js中的默认库)执行嵌套查询或使用承诺

您只需在sails中启用异步并使用它组合(连接)数据即可实现这一点

将在
/config/globals.js
中启用它:

async : true
使用该代码将是:

async.parallel({
    user : function(callback){
       //process user object here
       User.find({ first_name: { 'like': reqData }}).exec(function user(err, user){
           //add return to exit the function
           if (err) return callback(err, null);
           console.log(user);
           return callback(null, user);
       });
    },
    product : function(callback){
        //process product object here
       Product.find({ name: { 'like': reqData }}).exec(function user(err, product){
           if (err) return callback(err, null);
           console.log(product);
           return callback(null, product);
       });             
    }
},
function(err, results){
    // the results array will equal { user : [..], product : [..] } even though
    // the second function had a shorter timeout.
    // you can access the user and product objects by results.user & results.product and do the combine process here
});

上述代码片段基于问题中给出的代码示例,该示例已被修改以适应异步并行方法。

从用户u中选择u.name、u.age、p.name、p.brand左键在u.id=p.id上连接产品p,其中u.name类似于“%xyz%”,p.name类似于“%xyz%”;我想在waterline中进行此类查询,但由于mongo限制,我无法获得准确的结果\
async.parallel({
    user : function(callback){
       //process user object here
       User.find({ first_name: { 'like': reqData }}).exec(function user(err, user){
           //add return to exit the function
           if (err) return callback(err, null);
           console.log(user);
           return callback(null, user);
       });
    },
    product : function(callback){
        //process product object here
       Product.find({ name: { 'like': reqData }}).exec(function user(err, product){
           if (err) return callback(err, null);
           console.log(product);
           return callback(null, product);
       });             
    }
},
function(err, results){
    // the results array will equal { user : [..], product : [..] } even though
    // the second function had a shorter timeout.
    // you can access the user and product objects by results.user & results.product and do the combine process here
});