MongoDB含$gt/$lt的Where子句不生效,查询结果不符求助
MongoDB查询返回不符合itemValue条件数据的原因及解决办法
你的查询逻辑存在一个常见的数组匹配误区:当前写法中,itemInfos.itemValue < 180和itemInfos.itemCode = "height"这两个条件是分别作用在数组itemInfos的元素上的——MongoDB会判定只要数组里有任意一个元素满足itemValue < 180,同时有任意一个元素(可以是另一个元素)满足itemCode = "height",这条文档就会被返回。哪怕数组里存在itemValue > 180的元素,只要还有其他元素符合单个条件,整条数据依然会出现在结果里。
要解决这个问题,需要用$elemMatch来约束同一个数组元素同时满足两个条件,修改后的查询语句如下:
{ "customerId" : { "$in" : ["1372727786178519042"]}, "screenTime" : { "$gte" : "2022-08-25 00:00:00", "$lte" : "2023-08-25 23:59:59"}, "itemInfos": { "$elemMatch": { "itemValue" : { "$lt" : 180}, "itemCode" : "height" } } }
这样就能确保只返回那些itemInfos数组中存在同一个元素同时满足itemCode为height且itemValue小于180的文档。
内容的提问来源于stack exchange,提问作者刘文乐
相关产品推荐
相关产品推荐

