MongoDB Compass:对数组对象的过滤查询不起作用

MongoDB Compass: Filter query on array object is not working

我想根据提供的值过滤数组对象。 我在过滤器文本框中使用以下查询以及投影。似乎没有应用过滤器。

我也试过跟随但不幸的是数组没有被过滤

  { MissingPersonIds : {$elemMatch: { PhotoId : '2 - Copy (3).jpg'}} }

过滤器:

{ "MissingPersonIds.PhotoId" : "2 - Copy (3).jpg" }

投影:

{ MissingPersonIds : { $slice: [1,10] }}

架构是:

[{
  "_id": {
    "$oid": "61ada7da9a30fd8471869bbc"
  },
  "ImportKeyId": 5843,
  "MissingPersonIds": [
    {
      "PhotoId": "2 - Copy.jpg",
      "Description": "Account ID not found"
    },
    {
      "PhotoId": "2 - Copy (2).jpg",
      "Description": "Account ID not found"
    },
    {
      "PhotoId": "2 - Copy (3).jpg",
      "Description": "Account ID not found"
    },
    {
      "PhotoId": "2 - Copy - Copy.jpg",
      "Description": "Account ID not found"
    },
    {
      "PhotoId": "2 - Copy - Copy (2).jpg",
      "Description": "Account ID not found"
    }
  ]
}]

我期望的输出是:

[{
  "_id": {
    "$oid": "61ada7da9a30fd8471869bbc"
  },
  "ImportKeyId": 5843,
  "MissingPersonIds": [
    {
      "PhotoId": "2 - Copy (3).jpg",
      "Description": "Account ID not found"
    }
  ]
}]

您需要 $filter 在投影中过滤数组中的元素。

db.collection.find({},
{
  "MissingPersonIds": {
    $filter: {
      input: "$MissingPersonIds",
      cond: {
        "$eq": [
          "$$this.PhotoId",
          "2 - Copy (3).jpg"
        ]
      }
    }
  }
})

Sample Mongo Playground