在 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 模块 new ObjectID(req.session.user)
再次将 req.session.user
转换为 ObjectID,一切正常。我不知道为什么上次没有成功。
谢谢
最佳答案
在 sails-redis@0.10.0-rc3
中查询关联模型似乎表现符合预期。
首先,我创建了一个基本的User
模型:
module.exports = {
attributes: {
name: 'string'
}
};
第二个 ModelA
模型及其关联的User
:
module.exports = {
attributes: {
user: { model: 'User' }
}
};
然后,我创建了一个小型 mocha
测试,用于检查关联查询并减少其他地方引入的任何错误(例如在 session 处理中):
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();
});
});
});
});
});
});
摩卡测试成功完成,没有任何错误。这可能意味着(正如 Scott Gress 已经假设的那样)您的 req.session.user 变量不包含您期望的值。到 mongos ObjectID
的内部转换正在运行。
干杯, 大卫
关于node.js - 如何在一对一关系上使用记录 ID 进行 .find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23007706/