在sails-mongo(0.10.0-rc3 / beta)中,看起来外部id被转换为ObjectID
所以如果我有一对一关系的两个模型,我如何使用id进行查询?
示例:
ModelA
attributes: {
user: { model: 'User' }
}
User.js
attributes: {
...
}
现在我想查询像ModelA.find(user: req.session.user).exec(console.log)
那样,日志返回null []
而不是ModelA中属于当前用户的所有项目。
编辑:
我尝试使用mongodb模块req.session.user
再次将new ObjectID(req.session.user)
转换为ObjectID,一切正常。我不确定为什么它最后一次没用。
由于
答案 0 :(得分:0)
在sails-redis@0.10.0-rc3
查询相关模型似乎表现得如预期。
首先,我创建了一个基本的User
模型:
module.exports = {
attributes: {
name: 'string'
}
};
第二个ModelA
模型与关联的User
:
module.exports = {
attributes: {
user: { model: 'User' }
}
};
然后我创建了一个小的mocha
测试来检查关联查询并减少在其他地方引入的任何错误(例如在你的会话处理中):
var expect = require('chai').expect,
sails = require('sails'),
async = require('async');
describe('sails-mongo associations', function() {
before(function (done) {
sails.lift(function (err, sails) {
done(err);
});
});
after(function (done) {
sails.lower(function (err) {
done(err);
});
});
beforeEach(function(done) {
async.auto({
deleteUsers: function(done) {
User.destroy(done);
},
deleteModelA: function(done) {
ModelA.destroy(done);
}
}, function(err) {
done(err);
});
});
describe("#find", function() {
it("should allow to find a record using an associated model", function(done) {
User.create({ name: 'Test User' }).exec(function(err, user) {
expect(err).to.be.null;
expect(user).to.contain.key('id');
ModelA.create({ user: user.id }).exec(function(err, model) {
expect(err).to.be.null;
expect(model).to.contain.keys('id', 'user');
ModelA.find({ user: user }).populate('user').exec(function(err, model) {
expect(err).to.be.null;
expect(model).not.to.be.null.and.contain.key('user', user);
done();
});
});
});
});
});
});
mocha测试成功完成,没有任何错误。这可能意味着(正如Scott Gress已经假设的那样)您的req.session.user
变量不包含您期望的值。内部转换为mongos ObjectID
正在运行。
干杯, 大卫
答案 1 :(得分:0)
我自己也有同样的问题。似乎sails-mongo
不会将您的字符串ID转换为ObjectId()
- 语法,除非它是主键(_id
)。
Luckily, this is fixed in a recent commit
更新您的package.json
以使用主分支,或等待rc4释放。