如何比较Mongo中的两个字段,同时对其中一个字段执行操作?

时间:2015-03-03 19:57:12

标签: mongodb

我有两个字段,一个是小写字母,另一个是全部大写字母。在第二个字段全部为小写之后,我希望能够比较它们。我知道正常的比较是:

db.collection.find({$where: "this.name1 == this.name2"})

name1是" John"而name2是" JOHN" (例如)。 如何使name2小写以便正确比较?

2 个答案:

答案 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()"
})