NodeJs:如何将其他对象分配给 mongoose 查询响应 JSON

NodeJs: how to assign additional objects to mongoose query response JSON

我正在使用 mongoose 查询 post 的列表,并想通过向响应添加一个布尔值来确定用户是否喜欢查询函数中的图像 JSON.我正在尝试在 for 循环中执行此操作。

但是,当我console.log()时,post字段returns正确但没有修改为JSON。

我的函数:

function(req, res) {
    var isLiked, likeCount;
      Post
      .find(/* Params */)
        .then(posts => { 

             for (var index in posts) {
               
                posts[index].isLiked = posts[index].likes.includes(req.headers.userid)

                console.log(posts[index])   // does not show 'isLiked' field in JSON
                console.log(posts[index].isLiked)   // response is correct
            }
            res.send(posts) // does not have 'isLiked field
        })
},

Post 架构:

var postSchema = new Schema({
    userId: {
        type: String,
        required: true
    },
    caption: {
        type: String,
        required: false
    },
    likes: [{
        type: String,
    }]
});

因为

Post.find()

不是 return 对象,您可以将属性 isLiked 设置为 posts[index] 但它是私有的。 修复它的简单方法是使用 lean() 方法获取 return object

Post.find().lean()
.then(//do what you want)

要向查询对象添加属性,您应该将它们转换为 JS 对象:

function getPosts(req, res) {
  Post.find(/* Params */).then((posts) => {
    const result = [];
    for (const post of posts) {
      const postObj = post.toObject();
      postObj.isLiked = postObj.likes.includes(req.headers.userid);
      result.push(postObj)
    }
    res.send(result);
  });
}