【问题标题】:how to count an array object in a mongdb schema in nodejs?如何在节点 js 的 mongodb 模式中计算数组对象?
【发布时间】:2021-06-08 09:01:08
【问题描述】:

我想统计模式中的likes和cmets的数量。模式看起来像这样:

const PostSchema = new mongoose.Schema({
  text: {
    type: String,
    required: "Name is required",
  },

  photo: {
    data: Buffer,
    contentType: String,
  },
  likes: [{ type: mongoose.Schema.ObjectId, ref: "User" }],
  comments: [
    {
      text: String,
      created: { type: Date, default: Date.now },
      postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
      likes: Number,
    },
  ],
  postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
  created: {
    type: Date,
    default: Date.now,
  },
});

因为喜欢和 cmets 都是数组,所以我想计算其中的元素数量,并且我正在这样做,我阅读了聚合函数但无法弄清楚如何在这里使用它,因为我必须遍历所有发布文件并获取他们的喜欢和cmets。

const leaderboard = (req, res) => {
  Post.find({}, function (err, docs) {
    docs.forEach(function (data) {
      var userid = data.postedBy;
      console.log(userid);
      var likes = data.likes.length;
      console.log(likes);
      var comments = data.comments.length;
      console.log(comments);
      const date2 = new Date();
      const diffTime = Math.abs(date2 - data.created);
      const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
      console.log(diffDays);
      const updated = User.findByIdAndUpdate(
        userid,
        {score: likes+comments+diffDays },
        function (errr, doc) {
          if (errr) {
            console.log(err);
          } else {
            console.log("Updated User : ", doc);
          }
        }
      );

非常感谢这里的帮助,谢谢!

【问题讨论】:

    标签: javascript node.js mongodb mongoose nosql


    【解决方案1】:

    你可以试试project统计commentslikes的元素个数

    Post.aggregate([
        {$project: {_id: 1, count: {$commentssize: '$comments'},count: {$sizelikes: '$likes'}}
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-31
      • 2021-07-02
      • 1970-01-01
      • 2023-03-31
      • 2021-05-13
      • 2014-12-06
      • 2021-11-12
      • 2018-07-04
      相关资源
      最近更新 更多