繁体   English   中英

查询多个值时忽略MongoDB查询

[英]MongoDB query ignored when querying more than one value

我有一个文档结构,其中除其他键外,还包含一个简单的整数数组和另一个数字键,类似于:

{
    otherKey: "1234"
    numArray: [3200, 3220, 3230, 5433],
    empBand: 4
}

我想查询基数,以便获取numArray包含介于3200和3220之间且empBand等于4的任何值的文档。

我正在使用的查询是:

db.Data.find({ numArray: { $gte : 3200, $lte: 3220 }, empBand : 4})

但是,此查询完全忽略了numArray条件,并带我返回empBand等于4的随机文档。

如果我运行以下内容:

db.Data.find({numarray: { $gte : 3200, $lte: 3220 }})

我得到正确的结果,即仅包含在数组中的值(任何值)介于3200和3220之间的文档。

我为其他查询的两个值都设置了索引,并使用了explain(),可以看到仅在numArray上运行的用于查询的索引是numArray_empBand_otherKey索引。

在初始查询中使用explain()告诉我,所使用的索引是empData_otherKey索引,而不是预期的numArray_empBand索引,就好像第一个条件被完全忽略了一样。

我试过使用$ and这样编写查询:

db.Data.find({$and: [ { numArray: { $gte: 3200, $lte: 3220 } }, { empBand: 4}])

而且我仍然得到错误的结果。

提示使用numArray led索引仍然会得到错误的结果。

我是否缺少一些显而易见的东西?

编辑:

这些是我在第二个查询中得到的结果:

{ "numArray" : [ 3210, 46380, 47230 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210, 3220 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3110, 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }
{ "numArray" : [ 3210 ] }

以下是第一个查询的一些结果:

{ "empBand" : 4, "numArray" : [ 21250, 2522, 7487 ] }
{ "empBand" : 4, "numArray" : [ 1110, 45112 ] }
{ "empBand" : 4, "numArray" : [ 1130, 10390 ] }
{ "empBand" : 4, "numArray" : [ 1470, 46330 ] }
{ "empBand" : 4, "numArray" : [ 17510, 1753 ] }
{ "empBand" : 4, "numArray" : [ 1490, 93199 ] }
{ "empBand" : 4, "numArray" : [ 1500, 49410, 77390 ] }
{ "empBand" : 4, "numArray" : [ 1190, 43390 ] }
{ "empBand" : 4, "numArray" : [ 15310, 1533 ] }
{ "empBand" : 4, "numArray" : [ 1250, 1290, 10390, 46310 ] }
{ "empBand" : 4, "numArray" : [ 1610, 43999 ] }
{ "empBand" : 4, "numArray" : [ 3110, 47230 ] }
{ "empBand" : 4, "numArray" : [ 1621, 47799 ] }
{ "empBand" : 4, "numArray" : [ 1130, 16290, 38320, 91030 ] }
{ "empBand" : 4, "numArray" : [ 28520, 2875 ] }
{ "empBand" : 4, "numArray" : [ 1130, 47789 ] }
{ "empBand" : 4, "numArray" : [ 28520, 2875, 3663 ] }
{ "empBand" : 4, "numArray" : [ 27510, 2754, 2912 ] }
{ "empBand" : 4, "numArray" : [ 1190, 1290, 1630, 46220 ] }

我很高兴您遇到了一个错误,更具体地说是SERVER-1937:标量操作数为$ gt / $ lt / $ ne的数组产生的匹配不一致

这个帖子有答案:

Mongo查询问题$ gt,$ lt

我需要使用elemMatch:

db.Data.find({ numArray: { $elemMatch: { $gte: 3200, $lte: 3220 }}, empBand : 4})

得到正确的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM