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

Posted

技术标签:

【中文标题】MongoDB Compass:对数组对象的过滤查询不起作用【英文标题】:MongoDB Compass: Filter query on array object is not working 【发布时间】:2022-01-11 13:47:13 【问题描述】:

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

我也尝试过关注,但不幸的是数组没有被过滤

   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"
    
  ]
]

【问题讨论】:

【参考方案1】:

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

db.collection.find(,

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

Sample Mongo Playground

【讨论】:

以上是关于MongoDB Compass:对数组对象的过滤查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 查询求助,嵌套数组里面查东西

如何过滤mongodb聚合中的主数组

使用 mongodb compass 在我的数据库中添加了一些 json 数据,并尝试使用 mongoose 获取数据,但得到的是空数组

如何在mongodb的单个json文档中过滤对象数组? [复制]

MongoDB简介与增删改查

Mongodb查询过滤文档中的嵌套对象数组