node.js - 如何在一对一关系上使用记录 ID 进行 .find()

标签 node.js sails.js sails-mongo

在 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/

相关文章:

node.js - 需要打开哪些防火墙和代理设置才能使 Nodejs 的 google calendar api 正常工作?

javascript - Node.js 和 Heroku,如何插入第二个查询?

node.js - 如何使用 mongo-sails 在 Sails js 中存储点(lat,lng)

javascript - 如何将 sails.js 模型与关联一起使用?

javascript - 水线 (Sails.js) : AND conditions

node.js - sails JS : Setting autoPK:false still generates mongodb's id attribute

javascript - js 捆绑和范围困惑

javascript - Hive - Thrift - readMessageBegin 中缺少版本,旧客户端?

javascript - 无法从 api Controller js 文件获取数据以使用 Vue.js 应用程序在 sails js 中查看 ejs 文件

node.js - 通过套接字的身份验证方法