node.js - 如何将评论计数填充到项目列表中?

标签 node.js mongodb express mongoose

我的应用程序中有两个模型:项目和评论。一个 Item 可以有许多 Comments,并且 Comment 实例包含对具有键“comment”的 Item 实例的引用,以跟踪关系。

现在,当用户请求特定 URL 时,我必须发送所有项目的 JSON 列表及其评论计数。

function(req, res){
  return Item.find()
    .exec(function(err, items) {
        return res.send(items);
    });
};

我不确定如何将评论计数“填充”到项目中。这似乎是一个常见问题,我倾向于认为应该有一些比暴力更好的方法来完成这项工作。

所以请分享您的想法。您将如何“填充”项目的评论计数?

最佳答案

检查 MongoDB 文档并查找方法 findAndModify() - 使用它您可以自动更新文档,例如添加注释并同时增加文档计数器。

查找并修改

findAndModify 命令以原子方式修改并返回单个文档。默认情况下,返回的文档不包含更新时所做的修改。要返回包含更新后所做修改的文档,请使用新选项。

示例

使用update选项,更新运算符$inc用于计数器,$addToSet用于将实际注释添加到嵌入数组评论。

 db.runCommand(
            {
              findAndModify: "item",
              query: { name: "MyItem", state: "active", rating: { $gt: 10 } },
              sort: { rating: 1 },
              update: { $inc: { commentCount: 1 }, 
                        $addToSet: {comments: new_comment}  }
            }
              )

参见:

MongoDB: findAndModify

MongoDB: Update Operators

关于node.js - 如何将评论计数填充到项目列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16270025/

相关文章:

javascript - JWT 无法与 Express 路由器一起使用

javascript - 在javascript中解析复杂的json

node.js - 从 Node (Express) 处理 MongoDB 连接问题

javascript - 返回在循环中调用的回调结果的串联

node.js - Express 4、如何查看res中发送的所有cookie

ssl - compoundjs 同时支持 ssl 和普通的 http

javascript - Node.js:单变量,多个 Promise

javascript - Mongoose 错误 : JavaScript heap out of memory

node.js - 来自共享相同引用的两个模式的 Mongoose 查询

node.js - 如何在嵌套对象的嵌套数组中设置属性未定义