【问题标题】:Mongoose to count string array inside one documentMongoose 计算一个文档中的字符串数组
【发布时间】:2020-12-21 19:42:49
【问题描述】:

我正在尝试找到一个性能更好的解决方案,也许您不会从集合中获取整个字符串数组,而是只返回计数。基本上,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"
  ]

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    试试这个:

    User.aggregate([
        {
            $match: { _id: req.params.id }
        }, 
        {
            $project: { blacklistGroupLength: { $size: '$blacklistGroup' } }
        }
    ])
    

    【讨论】:

    • 我添加了这个,但console.log(res) 输出[]。应该说 10 pastebin.com/3w9BNVgE
    • 我得到了它的工作,但必须添加mongoose.Types.ObjectId(req.params.id)
    【解决方案2】:

    我从 MongoDB 文档中找到了一些可能对您有所帮助的内容。这是link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 2022-01-17
      • 1970-01-01
      • 2018-04-20
      • 2021-01-24
      • 2017-02-17
      • 2017-07-18
      相关资源
      最近更新 更多