Regex 如何使用MongoDB查找两个字段中具有相同值的所有文档?

Regex 如何使用MongoDB查找两个字段中具有相同值的所有文档?,regex,mongodb,mongodb-query,Regex,Mongodb,Mongodb Query,我需要找到哪些歌曲的标题与艺术家的名字相同。 我试过: db.myCollection.find({$where:“this.artist==/this.song_name/”}) 但是没有成功。请帮助我`如果我理解得很好,你需要找到所有的。这不需要正则表达式1。因为使用简单的测试就足够了。根据您的示例数据: Given that new Documents and querys: { "_id" : ObjectId("55803fd1cc0c9aa090e608be"), "

我需要找到哪些歌曲的标题与艺术家的名字相同。 我试过: db.myCollection.find({$where:“this.artist==/this.song_name/”})


但是没有成功。请帮助我`

如果我理解得很好,你需要找到所有的。这不需要正则表达式1。因为使用简单的测试就足够了。根据您的示例数据:

Given that new Documents and querys:
{
    "_id" : ObjectId("55803fd1cc0c9aa090e608be"),
    "song_name" : "Mickey is good",
    "time" : "3.56",
    "artist" : "Mickey"
}


{
    "_id" : ObjectId("55803fd1cc0c9aa090e608bf"),
    "song_name" : "Love is nothing",
    "time" : "5.56",
    "artist" : "Jimmy"
}

如果您确实需要查找标题与艺术家姓名相等的歌曲(示例数据中没有此类文档),您只需编写:

> db.test.find({$where:
      "this.song_name.toLowerCase().indexOf(this.artist.toLowerCase()) > -1"
})

{ "_id" : ObjectId("557ccec684ee2ba0375f4fcf"),
  "song_name" : "Mickey is good",
  "time" : "3.56",
  "artist" : "Mickey" }
请注意,在这两种情况下,我都使用
toLowerCase()
规范化了字符串。根据您的用例,您可能需要更复杂的东西。例如,如果您需要匹配



1如果艺术家名称包含元字符或量词,在此处使用正则表达式甚至可能有害。例如,给定艺术家名称“You+Me”,此处的
+
将被解释为前面字符的一次或多次出现。因此,匹配“YouMe”、“youuuume”而不是原始字符串“You+Me”。

分隔符内的任何内容都被视为“字符串”,不再是变量。此外,在“右侧”,这种比较是无效的。因此,请改为

db.test.find({“$where”:“返回新的RegExp(this.artist,i.test(this.song_name);”)
因此,从变量编译一个模式,而
/
将所有包含到字符串中的内容都视为字符串文字。方法是如何使用正则表达式对“布尔”结果进行内容比较

确实,对于基本字符串,“应该”比正则表达式快,但是如果需要不区分大小写的比较,那么
.toLowerCase()
.toUpperCase()
将引入它们自己的另一个成本,因此可以忽略的差异


另外,我认为它看起来更整洁。

你到目前为止做了什么,请分享……我已经用我到目前为止所做的修改了我的查询。。
> db.test.find({$where:
      "this.song_name.toLowerCase() == this.artist.toLowerCase()"
})

{ "_id" : ObjectId("557cd12284ee2ba0375f4fd1"),
  "song_name" : "The Monkeys",
  "artist" : "The Monkeys" }