如何使用自定义_id与猫鼬建立关系?

时间:2021-02-17 18:55:43

标签: node.js mongodb mongoose

我正在 Mongo 中开发我的第一个数据库。我正在使用 Mongoose 创建模型。 Soooo,我有一些问题。 我创建了以下模型:

teams.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const Teams = new Schema({
    _id: {type: Number},
    name: {type: String, required: true},
    url: {type: String, required: true},
    hash: {type: String, required: true},
}, {
    versionKey: false,
});

module.exports = mongoose.model('Team', Teams);

roster.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const Roster = new Schema({
    _id: {type: Number},
    team_id: {type: Number, ref: 'Teams'},
    country_id: {type: Number, required: true, ref: 'Countries'}
}, {
    versionKey: false,
});

module.exports = mongoose.model('Roster', Roster);

我在这里保存了一些球队和球员(例如这里的数据):

首先我创建了团队(根据我的 api 请求)

const Team= require('../models/team');
await Team.init();
let team = new Team({
  _id: 1,
  name: 'Guano',
  url: '/afsafd.php',
  hash: '21321fadsf'
});
team.save(function (err) {
  if (err) {
     throw new Error('Problem with save team');
  }
});

然后,我创建玩家

const Roster = require('../models/roster');
await Roster.init();
let player_1 = new Roster({
  _id: 777,
  team_id: 1,
  contry_id: 2
});
let player_2 = new Roster({
  _id: 333,
  team_id: 1,
  contry_id: 55
});
ros.push(player_1, player_2)
try {
  await Roster.insertMany(ros);
} catch (err) {
  throw new Error(err);
}

毕竟这一切,我想看看我的关系如何:

#this is function, which used in my route.
let qq = await Team.find({_id: 1}).populate('roster.team_id').exec();
//let qq = await Team.find({_id: 1}).populate('roster').exec(); tried(same output)
//let qq = await Team.find({_id: 1}).populate('roster'); tried(same output)
return qq;

我明白了:

[
  {
    _id: 1
    name: "Guano"
  }
]

但我想要这个:

[
  {
    _id: 1,
    name: "Guano",
    players: [{}] //array of my Roster obj.
  }
]

我做错了什么?

0 个答案:

没有答案