如何使$ indexOfArray搜索表达式超过对象数组?

时间:2019-06-17 21:05:09

标签: arrays mongodb

我正在尝试在MongoDB中处理对象数组。我需要获取与多个表达式匹配的对象的索引,但我却迷失了一部分。

这是一个简单的案例。我的实际文档还有许多其他字段,而我的$indexOfArray将具有3或4个子表达式,但是给定此文档:

https://mongoplayground.net/p/zZKEdBQcdwW

[
  {
    "_id": ObjectId("5b3b206c4a25da19d05f41a2"),
    "stops": [
      {
        "code": "MRGT",

      },
      {
        "code": "OLDST",

      },
      {
        "code": "ESSEXRD",

      },
      {
        "code": "DRYP",

      },
      {
        "code": "FNPK",

      }
    ]
  }
]

这个查询

db.collection.aggregate([
  {
    "$addFields": {
      indexLookup: {
        $indexOfArray: [
          "$stops.code",
          "ESSEXRD"
        ],

      },
      "indexObjectLookup": {
        $indexOfArray: [
          "$stops",
          [
            {
              $eq: [
                "$code",
                "ESSEXRD"
              ]
            }
          ]
        ],

      },

    }
  }
])

我希望indexLookupindexObjectLookup都返回2

但是,indexObjectLookup返回-1

我希望有人可以阐明

修改 我从@Akrion获得了一个有益的建议,尝试使用$unwind,它使我使用了此版本,该版本保留了文档结构,但向数组中的每个项目添加了indexhttps://mongoplayground.net/p/PSl473AK8n4

最终,我发现不用$unwind也可以完全不用数组索引就能完成我需要做的事情。但是我仍然不知道尝试$indexOfArray出了什么问题。

0 个答案:

没有答案