【问题标题】:Comparison between nested child field with outside field嵌套子字段与外部字段的比较
【发布时间】:2023-03-17 21:02:02
【问题描述】:

我要比较

requested_completion_utc > status_changed_utc.timestatus_changed_utc.status=6, 其中status_changed_utc.time 来自具有status_changed_utc.status = 6 的记录。

status_changed_utc.time 是嵌套的,requested_completion_utc 在数组之外。如何比较嵌套字段和外部字段。

{
    "_id": { "oid": "5ce726ae92e2247db561a2f2" },
    "created_utc": { "date": "2019-05-23T23:03:10.000+0000" },
    "requested_completion_utc": { "date": "2019-05-23T00:00:00.000+0000" },
    "status_changed_utc": [

      {
        "status": 1,
        "time": { "date": "2019-05-23T23:03:10.000+0000" }
      },
      {
        "status": 2,
        "time": { "date": "2019-05-23T23:05:03.000+0000" }
      },
      {
        "status": 4,
        "time": { "date": "2019-05-23T23:05:06.000+0000" }
      },
      {
        "status": 5,
        "time": { "date": "2019-05-23T23:05:07.000+0000" }
      },
      {
        "status": 6,
        "time": { "date": "2019-05-23T23:05:09.000+0000" }
      }
    ]
  },
  {
    "_id": { "oid": "5ce726ae92e2247db561a2f3" },
    "created_utc": { "date": "2019-05-23T23:03:10.000+0000" },
    "requested_completion_utc": { "date": "2019-05-25T06:00:00.000+0000" },
    "status_changed_utc": [
      {
        "status": 1,
        "time": { "date": "2019-05-23T23:03:10.000+0000" }
      },
      {
        "status": 2,
        "time": { "date": "2019-05-23T23:05:03.000+0000" }
      },
      {
        "status": 3,
        "time": { "date": "2019-05-23T23:05:06.000+0000" }
      },
      {
        "status": 4,
        "time": { "date": "2019-05-25T05:05:07.000+0000" }
      },
      {
        "status": 6,
        "time": { "date": "2019-05-25T05:55:09.000+0000" }
      }
    ]
  }

我尝试过这样做,但没有任何反应

db.test.find( 
  { 
    $expr: { 
      $gt: [ 
        "$requested_completion_utc", 
        {"$status_changed_utc.time", "$status_changed_utc.status": 6} 
      ] 
    } 
  } 
);

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用$elemMatch 运算符进行此类检查。 另外不要忘记选择对象的内部属性(在您的情况下为date)。 文档在这里:https://docs.mongodb.com/manual/reference/operator/query/elemMatch/

    db.test.find({
      "status_changed_utc": {
        $elemMatch: {
          "status": 6,
          "time.date": {
            $gt: "requested_completion_utc.date"
          }
        }
      }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      相关资源
      最近更新 更多