Mongodb-查询json数组中的字段是不是存在

Posted

技术标签:

【中文标题】Mongodb-查询json数组中的字段是不是存在【英文标题】:Mongodb- Query to check if a field in the json array exists or notMongodb-查询json数组中的字段是否存在 【发布时间】:2021-12-24 06:58:39 【问题描述】:

我在 MongoDB 中有一个 JSON,我正在尝试检查 JSON 中的至少一项是否不包含特定字段。


    "_id" : 12345,
     "orderItems" : [ 
         
            "itemId" : 45678,
            "isAvailable" : true,
            "isEligible" " false
        ,
        
             "itemId" : 87653,
             "isAvailable" : true
         
   ]

所以在上面的 JSON 中,由于订单项下的第二个不包含iseligible 字段,我需要获取这个_id。

到目前为止,我尝试了以下查询,但没有成功:

db.getCollection('orders').find("orderItems.iseligible":$exists:false)
    

【问题讨论】:

你能添加预期的输出吗?在 JSON 中? 如果没有符合条件的任何项目,我需要显示完整的文档。例如,有 2 个文档: "_id" : 12345, "orderItems" : [ "itemId" : 45678, "isAvailable" : true, "isEligible" " false , "itemId" : 87653, "isAvailable" :真] “_id”:12346,“orderItems”:[“itemId”:45678,“isAvailable”:真,“isEligible”“假,“itemId”:87653,“isEligibe”:假, "isAvailable" : true ] 在上面的例子中,输出应该返回第一个文档,因为它不包含 isEligible 对于其中一个项目 【参考方案1】:

您可以使用$elemMatch 来评估嵌套键的存在。完成后,投影出_id 值。

db.orders.find(
  orderItems: 
    $elemMatch: 
      "isEligible": 
        $exists: false
      
    
  
,

  _id: 1
)

这是一个带有完成代码的Mongo playground,还有一个similar SO answer。

【讨论】:

以上是关于Mongodb-查询json数组中的字段是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 字段索引后,如何快速检查一个该字段的数值是不存在的

在没有 for 循环的情况下更新多个文档 MongoDB

使用 MongoDB 检查字段是不是存在

如何使用 findOne 查询 mongodb 并排除数组中的一些嵌套字段

如何检查数组字段是不是包含唯一值或 MongoDB 中的另一个数组?

数组中字段的最小值和数组mongodb聚合查询中的第一个对象