2017-08-30 68 views
-2
// model Users.js 

是用戶模式:如何實現內加入帆水線

module.exports = { 
    autoCreatedAt: false, 
    autoUpdatedAt: false, 
    tableName : 'users', 
    attributes: { 
    user_id: { 
     type: "string", 
     primaryKey: true 
    }, 
     name : { 
     type : 'varchar' 
     }, 
     register_items : { 
     collection : 'register', 
     via : 'business_owner_id', 
     dominant : true 
     } 

    } 
}; 
// model Register.js 
that is register model 
module.exports = { 

    autoCreatedAt: false, 
    autoUpdatedAt: false, 
    tableName: 'register_items', 
    attributes: { 
    register_id: { 
     type: "integer", 
     primaryKey: true 
    }, 
    business_owner_id: { 
     model: 'users' 
    } 
    } 
}; 
// Controller 
module.exports = { 
    getUser : (req,res) => { 
     Users.find().populate('register_items') 
     .then(users => { 
      res.json({status : 200, data : users}); 
     }).catch(err => { 
      res.json({status : 500, message : 'Error ' + err}); 
     }); 
    } 
}; 
+0

請闡述你的問題,並檢查[如何提問](https://stackoverflow.com/help) –

+0

只是告訴我的語法內的帆水線 加入我能做到這一點與本機查詢,但不想做吃水線 –

回答

1

Users.findOne(USER_ID).populate( 'register_items')

1

帆水線作品之上SQL和NOSQL數據庫 - 這意味着模仿內部連接的功能可能無法像習慣於SQL的方式。

由於@Crusader在他們的回答中指出,您設置模型的方式爲您提供了一個很好的一個襯爲獲取一個userregister項目已附:

Users.findOne(user_id).populate('register_items').exec(function(err, user) { 
    // handle errors and empty results... 
    console.log(user.register_items); // will be full objects 
}); 

但它看起來像你已經在你的問題中使用類似的代碼。

由於該代碼也必須在NOSQL之上工作,因此不保證數據庫正在執行Inner Join。這可能只是兩個查詢(陸續)引擎蓋下:

  1. 獲取我的用戶
  2. 獲取所有相關的寄存器
  3. 附上他們

那將是甚至差很多一對多的關係!底線是,如果你使用水線,那麼 - 就像你使用mongo或任何NOSQL一樣 - 涉及多個模型的邏輯可能由你的應用程序(你的代碼或水線庫)完成,而不是由你的數據庫,你應該相應地規劃你的數據存儲。