猫鼬根据条件检查将其他属性附加到结果中

时间:2019-07-13 06:43:26

标签: node.js mongodb mongoose mongodb-query mongoose-schema

我想向猫鼬查询的结果文档中添加其他属性。我有一个帖子模型,在帖子模型中我添加了收藏夹,其中包含对收藏该帖子的用户的引用,我想了解用户是否喜欢该帖子以及该帖子收藏的总数

帖子模型

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const mongoosePaginate = require('mongoose-paginate-v2');
var aggregatePaginate = require('mongoose-aggregate-paginate-v2');

const postSchema = Schema({
    title: String,
    favourites: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }],
    description: String
});
var Post = mongoose.model('Post', postSchema.plugin(mongoosePaginate));
Post.prototype.hasLiked = function (uid) {
    return this.favourites.indexOf(uid) > -1
}
Post.prototype.totalLikes = function () {
    return this.favourites.length;
}
module.exports = Post;

控制器

  Post.paginate(query,
    options,
    function (err, result) {
      if (err) {
        console.log(err)
        res.json({
          error: err,
          status: 501,
          message: "Unable to get data"
        });
      } else {
        let isFavourite = result.hasLiked(res.locals.user.uid)
        let favouriteLength = result.totalLikes()
        console.log(isFavourite)
        console.log(favouriteLength)
        res.json({
          status: 200,
          data: result
        });
      }
    }
  );
});

在运行上述代码时,我遇到以下错误

TypeError: result.hasLiked is not a function

这是一种有效的解决方案,如果不能解决,请针对这种情况提出其他替代解决方案。

1 个答案:

答案 0 :(得分:1)

Post.paginate不会返回由Post实例实现的承诺。

按照文档(https://www.npmjs.com/package/mongoose-paginate-v2),您将在result.docs中收到您的帖子。循环播放,即可使用吸气剂。