arrays - 在 mongodb 数组中查找最接近的值

标签 arrays mongodb sorting mongodb-query aggregation-framework

我有一些学生,每个学生在每月的不同日子里被分配做家务。

例如:

{ name: 'Josh', choredays: [2, 5, 16, 20, 28]},
{ name: 'Will', choredays: [5, 15, 18, 21, 22]}

给定一个数字,我希望第二天得到每个学生必须做家务的输出。

例如,给定14,我想得到

Josh 16
Will 15

如何在 Mongo Aggregation 中表达这一点?

最佳答案

您可以尝试以下聚合

您需要使用$filter聚合运算符消除了较少的输入值。然后使用 $slice这消除了较大的值。

db.collection.aggregate([
  { "$addFields": {
    "items": {
      "$filter": {
        "input": "$choredays",
        "as": "chore",
        "cond": { "$gte": [ "$$chore", 14 ] }
      }
    }
  }},
  { "$addFields": { "items": { "$slice": [ "$items", 0, 1 ] }}},
  { "$unwind": "$items" },
  { "$project": { "items": 1, "name": 1 }}
])

将给出以下输出

[
  {
    "items": 16,
    "name": "Josh"
  },
  {
    "items": 15,
    "name": "Will"
  }
]

您可以查看here

关于arrays - 在 mongodb 数组中查找最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50799738/

相关文章:

Javascript 分配和增加 Obj 的键值(使用 Reduce)

c - 从 'strings' 访问未在变量中声明的字符 (C)

java - 什么是 Big Oh 表示法与排序算法的关系

C 用指针在字符串中查找子字符串

java - 如何将 SHA-1 输出的数组大小从 20 字节更改为适合 AES 加密中的 IV 16 字节

javascript - 无效传输,必须是具有日志方法的对象 winston mongodb logging

python - 用于 Python 的 MongoDB ORM?

mongodb - 按字符串枚举值对 mongo 结果进行排序

javascript - ReactJS 使用 .sort() 方法混合数组中的结果

sorting - 在 Clojure 中返回数组映射内的最高键值对