这是我在这里发表的第一篇文章,所以请保持温柔。 我在Node中使用Sequelize w / PostgresDB并尝试使用findOrCreate通过电子邮件搜索联系人。电子邮件条目采用JSON格式(请参阅下面的结构)......
我希望通过电子邮件找到联系人,并针对每个联系人条目迭代JSON数组中的每个电子邮件地址。
我在POST有效负载中传递了一个电子邮件地址和一个名字。
如果我无法通过电子邮件找到联系人,我想创建一个新联系人(这部分很简单)。
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的结构,我正在寻找ITERATE
[{
address: 'your.name@gmail.com',
primary: true,
rel: 'http://schemas.google.com/g/2005#home'
},{
address: 'work@work.com',
primary: false,
labels: ['work'],
},{
address: 'play@play.com',
primary: false,
labels: ['play'],
}]
有什么想法吗?任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
我会创建一个只包含电子邮件的数组,然后进行$in
搜索。
const emails = [{
address: 'your.name@gmail.com',
primary: true,
rel: 'http://schemas.google.com/g/2005#home'
},{
address: 'work@work.com',
primary: false,
labels: ['work'],
},{
address: 'play@play.com',
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])
}
});
答案 1 :(得分:0)
我为此找到了一个很好的解决方案......
首先,您必须更改数据值以键入:Sequelize.JSONB
然后你可以迭代嵌套的JSON对象和数组,如下所示:
Contacts.findOne({
where: {
email: {
$contains: [{
address: req.body.email
}]
},
UserId: req.user.id
}
})
**请注意,在$ contains中,我将对象包装在一个数组中