2017-07-06 63 views
0

這是我的第一篇文章,所以請溫和。 我在節點中使用Sequelize w/PostgresDB並嘗試使用findOrCreate通過電子郵件搜索聯繫人。電子郵件條目採用JSON格式(請參閱下面的結構)...想要在Sequelize/Postgres DB查詢中遍歷JSON以查找匹配值

我想通過電子郵件查找聯繫人,並針對每個聯繫人條目遍歷JSON數組中的每個電子郵件地址。

我正在傳遞郵件有效負載中的電子郵件地址和名稱。

如果我通過電子郵件找不到聯繫人,我想創建一個新聯繫人(這部分很簡單)。

router.post('/gmail/fetchcontact', function (req, res, next){ 

    Contacts.findOrCreate({ 
     where: { 
      email: // this is where I am stuck. How do I access this array and loop over?   
     }, 
     defaults: { 
      name: req.body.name // 
     } 
     }) 
     .then(response => { 
     if (response[1] === true) { 
      console.log('RESPONSE!!!', response[1]) 
     } 

     }) 

//這是我期待的JSON的結構,遍歷

[{ 
      address: '[email protected]', 
      primary: true, 
      rel: 'http://schemas.google.com/g/2005#home' 
     },{ 
      address: '[email protected]', 
      primary: false, 
      labels: ['work'], 
     },{ 
      address: '[email protected]', 
      primary: false, 
      labels: ['play'], 
     }] 

任何想法?任何幫助將不勝感激。謝謝!

回答

0

我會創建一個只包含電子郵件的數組,然後執行$in搜索。

const emails = [{ 
     address: '[email protected]', 
     primary: true, 
     rel: 'http://schemas.google.com/g/2005#home' 
    },{ 
     address: '[email protected]', 
     primary: false, 
     labels: ['work'], 
    },{ 
     address: '[email protected]', 
     primary: false, 
     labels: ['play'], 
    }].map(email => email.address); 

搜索:

Contacts.findOrCreate({ 
    where: { 
     email: { $in: emails } 
    }, 
    defaults: { 
     name: req.body.name // 
    } 
    }) 
    .then(response => { 
    if (response[1] === true) { 
     console.log('RESPONSE!!!', response[1]) 
    } 
    }); 

$in文檔是在這裏:http://docs.sequelizejs.com/manual/tutorial/models-usage.html#-findall-search-for-multiple-elements-in-the-database

+0

謝謝各位大大的答覆。欣賞它,會嘗試一下代碼,並且如果它能夠正常工作,就回到原地。 –

0

我發現爲這個偉大的解決方案......

首先,你必須改變datavalue鍵入:Sequelize.JSONB

然後你可以iter吃了嵌套的JSON對象和數組,像這樣:

Contacts.findOne({ 
    where: { 
     email: { 
     $contains: [{ 
      address: req.body.email 
     }] 
     }, 
     UserId: req.user.id 
    } 
    }) 

**請注意,在$包含我包裹對象數組