Как выполнить глубокое заселение пн goose? - PullRequest
0 голосов
/ 04 февраля 2020

это мой вопрос. js и пользователь. js Модель схемы с mon goose, как показано ниже, может кто-нибудь помочь, как заполнить все списки имен пользователей в массиве объекта лайков: [] с Node js, потому что Я столкнулся с этой проблемой почти 2 недели, я не мог заполнить имя пользователя в лайках. Пожалуйста, я ценю ваше предложение.

модель схемы вопроса

модель схемы пользователя

Ответы [ 3 ]

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

Чтобы заполнить данные пользователя, пожалуйста, используйте

Post.findOne( { _id: id } )
    .populate( "user" )
    .populate( "likes.user" );

Чтобы получить понравившуюся запись, пожалуйста, используйте

Post.find({ "likes": { "$gt": 0 } }, function(err, data) {
})

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

Post.find( {$where:'this.likes.length>0'} )

, поэтому, пожалуйста, используйте где и существует

Post.find( {likes: {$exists:true}, $where:'this.likes.length>0'} )
1 голос
/ 04 февраля 2020

Я попробовал ваш код, и он заработал на вашей модели. Если вы используете user только вы можете напрямую позвонить на .populate("user"), но если он вложенный, вам нужно сделать .populate("likes.user")

Post.findOne( { _id: id } ).populate( "user" ).populate( "likes.user" );
0 голосов
/ 04 февраля 2020

Да, спасибо Ratnadeep Bhattacharyya, теперь я могу заполнять имя пользователя в объекте массива лайков, а также возвращать только указанный массив c лайков. Ниже приведен рабочий код: Happy Coding, Jonh

//@route api/post/get/likes
router.get('/get/likes/:postId', auth, async (req, res) => {
  try {
    //check if post exist
    const likes = await Post.findOne({ _id: req.params.postId })
      .populate('user', ['name'])
      .populate('likes.user', ['name']);
    return res.status(200).json(likes.likes);
  } catch (error) {
    console.log(error.message);
    res.status(500).json({ msg: 'Server error' });
  }
});
...