我有两个字段,一个是小写字母,另一个是全部大写字母。在第二个字段全部为小写之后,我希望能够比较它们。我知道正常的比较是:
db.collection.find({$where: "this.name1 == this.name2"})
name1
是" John"而name2
是" JOHN" (例如)。
如何使name2
小写以便正确比较?
答案 0 :(得分:2)
如果这是一项常见操作,我强烈建议不要使用$where
而是改变文档以包含比较的预先计算值:
{
"name1": "John",
"name2" : "JOHN",
"cmp" : true
}
或
{
"name1": "John",
"name2" : "SAM",
"cmp" : false
}
$where
使用服务器端Javascript,这比服务器上的其他操作慢一个数量级。
答案 1 :(得分:1)
您可以使用JavaScript toLowerCase():
db.collection.find({$where: "this.name1.toLowerCase() == this.name2.toLowerCase()"})
我刚刚对此进行了测试,似乎如果某些文档缺少$where
子句中使用的字段,则查询将返回错误。
如果您不确定所有记录都包含比较字段,那么您的查询还应检查字段是否存在:
db.collection.find({
name1: {$exists: true},
name2: {$exists: true},
$where: "this.name1.toLowerCase() == this.name2.toLowerCase()"
})