Mongo查询对字段名称不区分大小写

时间:2017-04-07 22:17:30

标签: mongodb case-insensitive

示例:

db.stuff.save({"InnerDocument": {"Id":"123"}});
db.stuff.save({"InnerDocument": {"ID":"123"}});

是否有可能实现以下目标?

> db.stuff.find({"InnerDocument.id":"123"}).count();
2

2 个答案:

答案 0 :(得分:0)

没有简单的方法可以做那样的事情。你可以通过mongodb的map-reduce框架来实现。这是一个例子:

db.stuff.mapReduce(
function(){ 
    var  key = 'id';
    var  value_temp = '123';
    for (i in this['InnerDocument']){
      if (key === i.toLowerCase() && this['InnerDocument'][i] === value_temp){
            emit(key,1);
      }
    }

    },
function(key,value){
    return Array.sum(value);
    },
{out : {inline : 1}}
)['results'][0];

正如这里提到的MongoDB case insensitive key search,没有像这样的运算符。

答案 1 :(得分:0)

这是不可能的。您可以执行$or查询,例如:

db.stuff.find({$or:[{"InnerDocument.id":"123"}, {"InnerDocument.Id":"123"}, {"InnerDocument.ID":"123"}]}).count();

但那很难看。我建议您保持数据和字段名称惯例的清晰和一致,这样您就不必这样做了。