Пн goose заполнить () - PullRequest
       11

Пн goose заполнить ()

0 голосов
/ 06 февраля 2020

ссылаясь на Mon goose пример заполнения URL, приведенный для https://mongoosejs.com/docs/populate.html#checking -популяционного , кажется, что между обеими схемами существует двусторонняя связь. Что, если у меня есть только односторонние отношения, например (используя тот же пример схемы, но схема Person не Ссылка на Story)

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

const personSchema = Schema({
  name: String,
  age: Number
});

const storySchema = Schema({
  author: { type: Schema.Types.ObjectId, ref: 'Person' },
  title: String
});

const Story = mongoose.model('Story', storySchema);
const Person = mongoose.model('Person', personSchema);

Как я могу вернуть вывод GET Story, который выглядит как следующее:

{
  author :{
    name: "Bla bla bla",
    age: 30
  }
  title : "ABC Story"
}

Я всегда получаю это в данный момент:

{
  author :34235245453
  title : "ABC Story"
}

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Я не уверен, является ли это хорошей практикой, но вы можете достичь этого следующим образом

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

const personSchema = Schema({
  name: String,
  age: Number
});

const storySchema = Schema({
  author: Schema.Types.ObjectId, //modified by just defining the type
  title: String
});

const Story = mongoose.model('Story', storySchema);
const Person = mongoose.model('Person', personSchema);

при заполнении,

SOMETHING.find()
.populate({
   'path':'author',
   'model':'Person'
});
1 голос
/ 06 февраля 2020

Я думаю, вы путаете функцию populated () и функцию populate ().

Чтобы получить информацию об авторе для истории, нам нужно использовать команду populate следующим образом:

router.get("/stories/:id", async (req, res) => {
  const result = await Story.findById(req.params.id).populate("author");
  res.send(result);
});

Допустим, у нас есть этот человек:

{
    "_id": "5e3c63ba3a178830dc497a00",
    "name": "Name1",
    "age": 33,
    "__v": 0
}

И эта история от пользователя:

{
    "_id": "5e3c63e93a178830dc497a02",
    "author": "5e3c63ba3a178830dc497a00",
    "title": "Story1",
    "__v": 0
}

Результат будет таким, когда мы отправим запрос get на наш маршрут ( http://.../stories/5e3c63f33a178830dc497a02)

{
    "_id": "5e3c63e93a178830dc497a02",
    "author": {
        "_id": "5e3c63ba3a178830dc497a00",
        "name": "Name1",
        "age": 33,
        "__v": 0
    },
    "title": "Story1",
    "__v": 0
}

Чтобы получить все истории с информацией об авторе, мы можем использовать метод find () следующим образом:

router.get("/stories", async (req, res) => {
  const result = await Story.find().populate("author");
  res.send(result);
});
...