【问题标题】: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 对于其中一个项目

标签: mongodb


【解决方案1】:

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

db.orders.find({
  orderItems: {
    $elemMatch: {
      "isEligible": {
        $exists: false
      }
    }
  }
},
{
  _id: 1
})

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

【讨论】:

    猜你喜欢
    • 2019-08-02
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多