1

在sails-mongo(0.10.0-rc3/beta) 中,看起来外国ID 已转换为,ObjectID因此如果我有两个具有一对一关系的模型,如何使用ID 进行查询?

例子:

ModelA
attributes: {
 user: { model: 'User' }
}

User.js
attributes: {
  ...
}

现在我想查询 do likeModelA.find(user: req.session.user).exec(console.log)并且日志返回null []而不是 ModelA 中属于当前用户的所有项目。

编辑:我尝试req.session.user使用 mongodb 模块再次转换为 ObjectID new ObjectID(req.session.user),一切正常。我不知道为什么它上次没有工作。

谢谢

4

2 回答 2

0

我自己也有同样的问题。除非它是主键() ,否则似乎sails-mongo不会将您的字符串 id 转换为-syntax。ObjectId()_id

幸运的是,这在最近的提交中得到了修复

更新您package.json以使用主分支,或等待 rc4-release。

于 2014-04-28T12:20:05.607 回答
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正在工作。

干杯,大卫

于 2014-04-12T08:34:48.983 回答