Node.js 双方是否应该建立一对一的联系?

Node.js 双方是否应该建立一对一的联系?,node.js,model,sails.js,waterline,Node.js,Model,Sails.js,Waterline,我有两种型号(用户和代理)。然后我创建一个用户和一个代理。我希望在使用/user和/agent的蓝图路由时看到关联。我只看到用户模型通过/agent蓝图与agent相关联。/user蓝图没有对代理的任何引用/关联 当我尝试使用以下命令通过用户ID访问代理时,会出现此问题: User.findOne(req.body.userId).populate('agent').exec(function(err, agent) “代理”实际上是用户信息…而不是代理 以下是我的模型: 用户: attrib

我有两种型号(用户和代理)。然后我创建一个用户和一个代理。我希望在使用/user和/agent的蓝图路由时看到关联。我只看到用户模型通过/agent蓝图与agent相关联。/user蓝图没有对代理的任何引用/关联

当我尝试使用以下命令通过用户ID访问代理时,会出现此问题:

User.findOne(req.body.userId).populate('agent').exec(function(err, agent)
“代理”实际上是用户信息…而不是代理

以下是我的模型:

用户:

attributes: {
  agent: {
    model: 'agent',
    via: 'owner'
  }
}
attributes: {
  owner: {
    model: 'user'
  }
}
代理:

attributes: {
  agent: {
    model: 'agent',
    via: 'owner'
  }
}
attributes: {
  owner: {
    model: 'user'
  }
}

谢谢你的阅读

您理解的
填充
错误<代码>填充()
不会用新信息替换上次调用。它从模型中获取属性(您在
填充('attribute')
中指定),并将模型中该属性的id替换为由其id查找的另一个模型信息

让我们深入研究一下这个例子

您有
用户
代理
模型

// api/models/User.js
module.exports = {
  attributes: {
    agent: {
      model: 'Agent',
      via: 'owner'
    }
  }
};

// api/models/Agent.js
module.exports = {
  attributes: {
    owner: {
      model: 'User',
      via: 'agent'
    }
  }
};
// api/controllers/AnyController.js
module.exports = {
  index: function(req, res) {
    User
      .findOne(req.param('userId'))
      .populate('agent')
      .then(function(user) {
        console.log(user); // User information
        console.log(user.agent); // Agent information for that user
        return user;
      })
      .then(res.ok)
      .catch(res.negotiate);
  }
};
您正在调用
User.findOne(userId).populate('agent').exec(function(err,User){}
,并希望仅获取我所理解的
agent
。错误。它返回
User
模型,其中
agent
模型作为
User
模型的属性

// api/models/User.js
module.exports = {
  attributes: {
    agent: {
      model: 'Agent',
      via: 'owner'
    }
  }
};

// api/models/Agent.js
module.exports = {
  attributes: {
    owner: {
      model: 'User',
      via: 'agent'
    }
  }
};
// api/controllers/AnyController.js
module.exports = {
  index: function(req, res) {
    User
      .findOne(req.param('userId'))
      .populate('agent')
      .then(function(user) {
        console.log(user); // User information
        console.log(user.agent); // Agent information for that user
        return user;
      })
      .then(res.ok)
      .catch(res.negotiate);
  }
};

您可以在此处了解更多有关人口的信息-

Sails不完全支持一对一模型关联--您必须设置“外键”两边都有。有关更多信息,请参阅。我很想把这个问题作为那个问题的重复来结束,但设置略有不同。

我认为OP面临的问题不太一样——这听起来更像是对Sails中一对一关联支持的误解。@sgress454我不知道。每次设置时一对一的联系一切都按预期进行。