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 字段索引后,如何快速检查一个该字段的数值是不存在的
如何使用 findOne 查询 mongodb 并排除数组中的一些嵌套字段