Население Мангуста не работает, возвращая [Объект] только не поля - PullRequest
0 голосов
/ 30 июня 2018

Эй, ребята, я пытаюсь получить некоторые данные, используя mongoose из MongoDB.

это даже не заполнение первого уровня.

Я постараюсь объяснить ситуацию ниже.

У меня есть структура документов, как показано ниже:

Схема [s]

- UsersSchema

_id : { type: mongoose.Schema.Types.ObjectId },    
userData : [{ type: mongoose.Schema.Types.ObjectId, ref: 'DataType' }],


- DataTypeSchema

_id : { type: mongoose.Schema.Types.ObjectId },    
data : [{ type: mongoose.Schema.Types.ObjectId, ref:'Data' }],


- DataSchema

_id : { type: mongoose.Schema.Types.ObjectId },    
desc: String

Заполнение данных:

  • в User> userData : ["dataTypeID" , "dataTypeID" ]
  • в DataType> data : ["dataID" , "dataID" ]
  • в данных> desc: "pending"

Проблема:

Я пытаюсь получить desc поле Data в моем User документе.

Что я пробовал:

1 попытка

await User.find().populate('userData').lean();
Ответ

: должен заполнить модель DataType. вместо этого я смотрю на [ [Object], [Object] ],

[{
    _id: 5b37aa4638a07505e809191a,
    userData: [ [Object], [Object] ],
    __v: 0
}]

2 попытки

await User.find().populate('userData.data').lean();

Я пытался сделать что-то, что я не знаю, что он будет делать: D

ответ: и теперь он возвращает идентификаторы DataType модели

[{
   _id: 5b37aa4638a07505e809191a,
    userData: [ 5b35577759407235a4293020, 5b355fb5f51a0c1de0a3ab3d ],
    __v: 0
}]

3 попытки

затем после прочтения документации мангуста:

await User.find().populate({
  path: 'userData',
  model: 'User',
  populate: {
    path: 'data',
    model: 'DataType',
  }
}).lean();

ответ: полученный и пустой массив userData : []

[{
 _id: 5b37aa4638a07505e809191a,
 userData: [ ],
 __v: 0
}]

note : если я удаляю model: 'User' из первого заполнения, я получаю тот же ответ, что и .populate('userData') = [ [Object], [Object] ],

после поиска ответов в ответах, мне это нравится: mongoose-deep-populate для глубокого заполнения, которое также работает, так как обычное заполнение mongoose не дает никакого эффекта.

мне просто не имеет смысла, почему я не могу даже заполнить DataType в User: (

Я надеюсь, что кто-нибудь поможет мне в этой странной ситуации.

спасибо

1 Ответ

0 голосов
/ 30 июня 2018

Вы почти шли в правильном направлении с 3-й попытки, но вы дали неверную модель для заполнения.

Как вы выяснили, это действительно проблема nested population или deep population, но при заполнении необходимо ввести model,

Поскольку userData представляет собой коллекцию _id из DataType, model должно быть DataType, а не User, аналогично data представляет собой коллекцию _id из Data, model должно быть Data, а не DataType. Внесите эти изменения, и все должно работать как положено.

model в .populate() означает mongodb/mongoose из какой коллекции его заполнить.

Попробуйте это:

await User.find().populate({
  path: 'userData',
  model: 'DataType',
  populate: {
    path: 'data',
    model: 'Data',
  }
}).lean();

Кроме того, поскольку вы также определили Ref в схеме, вам на самом деле не нужно передавать model в populate, он будет автоматически знать, из какой коллекции нужно заполнить.

Также должен работать приведенный ниже запрос:

await User.find().populate({
  path: 'userData',
  populate: {
    path: 'data'
  }
}).lean();

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...