【问题标题】:Sequelize PostgreSQL: query to see if string is within an arraySequelize PostgreSQL:查询字符串是否在数组中
【发布时间】:2017-04-21 22:03:40
【问题描述】:

鉴于我有一个名为 Model 的模型,其中包含一个名为 items 的列,其中包含一个字符串数组,我如何查询字符串 queryString 是否在数组中或在数组?

示例:

items: ["cat", "dog", "bird", "turtle", "doe" ]

queryString = ["%do%","%b"]

应该返回

animalArray = ["dog", "doe", "bird"]


编辑:有没有办法以某种方式将 $overlap 与 $iLike 配对?

Model.findAll({
    where: {
        items: { $in: { $iLike: { $any: queryString } } }
    }
}).then(function(array){
    // Do whatever here with array
})

$iLikeSequelize 中一个特殊的 Postgres 东西

谢谢!

【问题讨论】:

  • 错误的数据结构。请参阅 postgresql 数组文档(它说如果你正在搜索你的数组,你得到了错误的结构)

标签: javascript sql postgresql sequelize.js


【解决方案1】:

试试这个解决方案。

第 1 步:创建一个新数组来存储您的类似条件

var conditions = [];

var queryString = ["%do%","%b"];

第 2 步:循环您的 queryString 值

for(var x in queryString) {
    // do something
}

第 3 步: 内部循环只需附加您的 $like 条件

conditions.push({
    items: {
        $like: queryString[x]
    }
});

所以你的数组会是这样的

[{
    items: {
        $like: "%do%"
    }
},{
    items: {
        $like: "%b"
    }
}]

所以你的 sequelize 查询会是这样的

var conditions = [];
var queryString = ["%do%","%b"];

for(var x in queryString) {
    conditions.push({
        items: {
            $like: queryString[x]
        }
    });
}

Model.findAll({
    where: {or: conditions}
}).then(function(array){
    // Do whatever here with array
})

【讨论】:

  • 我已经尝试过了。您不能将数组与字符串 iirc 进行比较。不过感谢您的尝试!
猜你喜欢
  • 2019-03-28
  • 2020-12-01
  • 1970-01-01
  • 2020-12-19
  • 2014-02-09
  • 1970-01-01
  • 2022-10-14
  • 2017-03-17
  • 1970-01-01
相关资源
最近更新 更多