【问题标题】:Mongodb query document array field length without fetch the arrayMongodb查询文档数组字段长度不取数组
【发布时间】:2018-12-14 01:26:33
【问题描述】:

假设我有一个包含数组字段的集合:

{
  title: String,
  users: [String],
}

现在我需要从集合中查询一个文档列表,在每个文档中只使用 users 的长度,而在 users 数组中没有实际元素(因为它可能很大,不值得从 db 中获取它们并计算长度):

Collection.find({}).sort({ _id: -1 })

有可能吗?

【问题讨论】:

  • 要统计users数组中的元素吗?
  • @AnthonyWinzlet 是的,没错

标签: node.js mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

您可以使用$size 聚合运算符来查找users 数组的长度

db.collection.aggregate([
  { "$project": { "userLength": { "$size" :"$users" }}}
])

如果要查找数据库中存在的所有users数组长度

db.collection.aggregate([
  { "$group": {
    "_id": null,
    "allUsersArrayLength": { "$sum": { "$size": "$users" }}
  }}
])

【讨论】:

  • 不会影响查询的性能。只为每个文档添加一个新密钥。更好的是“找到所有文档”并通过迭代检查长度。甚至数据库在 JavaScript 代码方面可以做得更好。
猜你喜欢
  • 2020-10-08
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多