Sails.js在数组中搜索

时间:2015-10-14 14:43:47

标签: postgresql data-structures model sails.js waterline

我正在使用风帆,我需要找到在数组中具有特定值的对象。

我有这个型号:

User = {
 data = { type: 'array}
}

当我这样做时:

User.find({data:3}).exec(...) 

// => It's returns nothing

如果我试试

User.find({data:{contains:3}}).exec(...)

// => It's will return all User who have '3' in the array 
but it will return the users whose have 34 or 13, ... too.

在风帆中找不到阵列中的记录?

如果我将数据类型设为'json'会发生什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上无法搜索arrayjson类型。

您必须使用关联:http://sailsjs.org/documentation/concepts/models-and-orm/associations

或者让所有用户手动进行搜索,但如果您的数据库中有很多用户则不会对其进行优化

答案 1 :(得分:1)

实际上可以搜索数组或json类型。

Waterline正在做的是等同于where data = '%3%',并且在您的数据库中,该数组被存储为字符串。

如果你改为

,你可以从技术上做你想做的事

User.find({data:{contains:',3,'}}).exec(...)

上述搜索假定您要查找的内容不是数组中的第一个/最后一个条目。如果存在这种可能性,那么您必须执行以下操作来检查所有情况。

{data:{contains:[',3,','[3','3]']}}

根据您的应用程序,数据库设置这通常是一个非常低效的搜索。但是如果不经常这样做,并且字段被索引,那么你的数据库就不会太大了。我不得不自己使用这种方法。但是你真的应该首先查看@jaumard提到的协会。

为什么不实施呢?因为SQL数据库中的json对象相对较新。