Javascript 希望在Sequelize/Postgres DB查询中迭代JSON以查找匹配值
这是我在这里的第一篇帖子,所以请温柔一点。 我正在节点中使用Sequelize w/PostgresDB,并尝试使用findOrCreate通过电子邮件搜索联系人。电子邮件条目采用JSON格式(请参见下面的结构) 我想通过电子邮件找到联系人,并在JSON数组中迭代每个联系人条目的每个电子邮件地址 我在邮件有效载荷中传递了一个电子邮件地址和一个名字 如果我无法通过电子邮件找到联系人,我想创建一个新联系人(这部分很简单) //这就是我希望迭代的JSON的结构Javascript 希望在Sequelize/Postgres DB查询中迭代JSON以查找匹配值,javascript,json,node.js,postgresql,sequelize.js,Javascript,Json,Node.js,Postgresql,Sequelize.js,这是我在这里的第一篇帖子,所以请温柔一点。 我正在节点中使用Sequelize w/PostgresDB,并尝试使用findOrCreate通过电子邮件搜索联系人。电子邮件条目采用JSON格式(请参见下面的结构) 我想通过电子邮件找到联系人,并在JSON数组中迭代每个联系人条目的每个电子邮件地址 我在邮件有效载荷中传递了一个电子邮件地址和一个名字 如果我无法通过电子邮件找到联系人,我想创建一个新联系人(这部分很简单) //这就是我希望迭代的JSON的结构 [{ address
[{
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'],
}]
有什么想法吗?任何帮助都将不胜感激。谢谢 我会创建一个只包含电子邮件的数组,然后在中搜索
$
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])
}
});
关于$in
的文档在这里:我找到了一个很好的解决方案
首先,必须将数据值更改为类型:Sequelize.JSONB
然后您可以迭代嵌套的JSON对象和数组,如下所示:
Contacts.findOne({
where: {
email: {
$contains: [{
address: req.body.email
}]
},
UserId: req.user.id
}
})
**请注意,在$contains中,我将对象包装在一个数组中非常感谢您的回复。非常感谢,我将试用代码,如果有效,请返回。。。
Contacts.findOne({
where: {
email: {
$contains: [{
address: req.body.email
}]
},
UserId: req.user.id
}
})