【问题标题】:sailsjs waterline search into two tablessailsjs 水线搜索成两个表
【发布时间】:2015-11-23 10:53:16
【问题描述】:

sailsjs waterline 结合从一个表中搜索名称(例如 '%sam%')和从另一个表中搜索产品名称(例如 '%nike%')并左连接以获取用户方面的数据。我知道 mongo 中没有左连接,但如何实现这一点。我正在使用 mongodb。


var reqData =  req.param('q');
        console.log(reqData);
        // Lookup for records that match the specified criteria
         reqData = '%'+reqData+'%';

        console.log(reqData);
        User.find({ first_name: { 'like': reqData }}).exec(function user(err, user){
                    if (err) return res.json(err);
                    console.log(user);
                    res.json(true);
        }); 
Product.find({ name: { 'like': reqData }}).exec(function user(err, user){
                        if (err) return res.json(err);
                        console.log(user);
                        res.json(true);
            }); 

【问题讨论】:

    标签: node.js sails.js waterline sails-mongo


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以通过在您的风帆中启用异步并使用它来组合(连接)您的数据来简单地实现这一点。

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

      上面的 sn-p 是基于您从问题中给出的代码示例,该示例已被修改以适应异步并行方法。

      【讨论】:

      • SELECT u.name,u.age,p.name,p.brand FROM user u LEFT JOIN product p ON u.id = p.id where u.name like "%xyz%" and p.name 像 "%xyz%";我想在水线中进行此类查询,但由于 mongo 限制,我无法获得准确的结果。\
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多