根据列表中的值查询模型

当我通过电子邮件查询用户时:

User.findOne({email: 'a@a.com'}).done(function(err, u){console.log(u.sessionTokens);}) 

我有它的代币清单:

 [ { token: '8dfe6aa0-2637-4b3f-9a3c-3ae8dc225b77', issuedAt: Tue Jan 14 2014 14:40:22 GMT+0100 (CET) } ] 

但是,当我在这个列表中查询一个令牌时,它不检索用户:

 User.findOne({'sessionTokens.token':'8dfe6aa0-2637-4b3f-9a3c3ae8dc225b77'}).done(function(err, u){console.log(u);}) => undefined 

有任何想法吗 ? User.findOne({'sessionTokens.token':'8d...77'})是否是正确的查询?

编辑

我的用户模型是这样的:

 module.exports = { schema: true, attributes: { email: { type: 'email', required: true }, encryptedPassword: { type: 'string' }, sessionTokens: { type: 'array' }, ... } } 

sessionToken是Arraytypes的属性。 这个数组包含几个对象,如:

 { token: '8dfe6aa0-2637-4b3f-9a3c-3ae8dc225b77', issuedAt: Tue Jan 14 2014 14:40:22 GMT+0100 (CET) } 

编辑

我已经用mongo-sails而不是mongo-disk进行了testing,这个工作正常,但是正如Chad指出的那样,它取决于所使用的适配器。

Solutions Collecting From Web of "根据列表中的值查询模型"

在#sailsjs @ freenode的robdubya&sfb_的帮助下,我们讨论了一下这个解决scheme。 答案取决于你使用的适配器。 我最熟悉的适配器是mysql适配器,在该适配器中,“数组”属性types被作为JSONstring序列化到数据库。 所以在这种情况下,在模型的查询中使用'contains'修饰符可以让你find你正在寻找的logging:

 var criteria = { sessionToken: { contains: '8dfe6aa0-2637-4b3f-9a3c-3ae8dc225b77' } }; User.findOne(criteria).done(function (err, user) { ... });