当我通过电子邮件查询用户时:
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是Array类型的属性。这个数组包含几个对象:
{ token: '8dfe6aa0-2637-4b3f-9a3c-3ae8dc225b77',
issuedAt: Tue Jan 14 2014 14:40:22 GMT+0100 (CET) }
修改
我已经用mongo-sails而不是mongo-disk进行了测试,这个工作正常,但是当Chad指出这一点时,它取决于所使用的适配器。
答案 0 :(得分:2)
在robdubya&的帮助下sfb_在#sailsjs @freenode中,我们讨论了一个解决方案。答案取决于您使用的适配器。我最熟悉的适配器是mysql适配器,在该适配器中,'array'属性类型作为JSON字符串被序列化到数据库。因此,在这种情况下,在模型查询中使用'contains'修饰符可以让您找到您要查找的记录:
var criteria = {
sessionToken: {
contains: '8dfe6aa0-2637-4b3f-9a3c-3ae8dc225b77'
}
};
User.findOne(criteria).done(function (err, user) {
...
});