【问题标题】:Find nearest value in an array in mongodb在mongodb的数组中查找最近的值
【发布时间】:2018-11-20 19:44:32
【问题描述】:

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

例如:

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

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

比如给定14,我想得到

Josh 16
Will 15

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

【问题讨论】:

  • 你的意思是Will 15
  • @FlissHou 或者 Will 应该在 14 日做家务......谢谢你接听。

标签: arrays mongodb sorting mongodb-query aggregation-framework


【解决方案1】:

你可以试试下面的聚合

您需要使用$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2011-07-24
    • 2012-10-27
    • 2018-11-25
    相关资源
    最近更新 更多