2015-10-14 73 views
1

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

我有了这个模型:

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'会发生什么?

谢谢!

回答

1

这实际上不可能在arrayjson类型中搜索。

你必须将其与关联:http://sailsjs.org/documentation/concepts/models-and-orm/associations

还是让所有的用户和手动进行搜索,但如果你在你的数据库有很多用户的它不是最优化的

+0

你知道为什么没有实现吗? –

+0

我不......我认为这不是容易实现的原因Waterline支持很多不同的数据库,JSON和数组在SQL数据库中并不是真正的类型(据我所知)。 – jaumard

1

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

什么水线正在做的是相当于where data = '%3%',在你的数据库中,数组被存储为一个字符串。

技术上可以做你想做的,如果你不是

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

上面的搜索假设你要找的究竟是不是数组中的第一个/最后一个条目。如果有这种可能性,那么你将不得不做以下检查所有情况。

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

根据您的应用程序,数据库设置这通常会是一个非常低效的搜索。但如果不经常做,并且该字段被索引,那么您的数据库不会太大,然后去做。我不得不偶尔使用这种方法。但是你真的应该像@jaumard所说的那样检查关联的第一个。

为什么不实施呢?因为SQL数据库里面的json对象是比较新的。

+0

但是,当数据是[2,3,10]它不能正常工作? –

+0

抱歉,错字。我会更新答案。 – Meeker

+0

好吧,我会尝试!谢谢 ! –