猫鼬在一个文档中计算字符串数组

时间:2020-04-17 18:38:26

标签: node.js mongodb mongoose

我试图找到一种性能更好的解决方案,也许您不从集合中获取整个字符串数组,而是只返回计数。基本上,countDocuments等效于一个用户集合中的字符串数组。

我有一个可行的解决方案,但是如果该列表过长,那么性能将不那么理想。

                  User.findById(
                  { _id: req.params.id }, { _id: 0 })
                  .select("blacklistGroup").then((result) => {
                    let output = JSON.parse(JSON.stringify(result.blacklistGroup));
                    console.log(output.length + " + people");
                  });

我希望得到一个更有效的解决方案的示例,该解决方案与countDocuments更加一致,但适用于字符串数组。感谢您的帮助!

这是blacklistGroup的模型定义

  blacklistGroup: [String]

收集示例

  "blacklistGroup": [
    "5e98e8e785e69146f841d239",
    "5e9867ff5e72550988820dd3",
    "5e98e90d85e69146f841d23a",
    "5e98c950f4fb3f63b4634e30",
    "5e99fcf3a506cf570056898b",
    "5e99fd15a506cf570056898c",
    "5e99fd3aa506cf570056898d",
    "5e99fd64a506cf570056898e",
    "5e99fda5a506cf570056898f"
  ]

3 个答案:

答案 0 :(得分:1)

尝试以下方法: User.aggregate([{$ match:{_id:req.params.id}},{$ project:{blacklistGroupLength:{$ size:'$ blacklistGroup'}}}])

答案 1 :(得分:0)

您的blacklistGroup是否具有类似于-blacklistGroup [“ name1”,“ name2”]]的列表? 希望您能看到详细的模型视图。

答案 2 :(得分:0)

我从MongoDB文档中发现了一些可以帮助您的东西。这是link