Если я это хорошо понимаю, вам нужно найти все songs whose title contains the name of the artist. Вам не нужно регулярное выражение для этого . В качестве простого теста с использованием indexOf
было бы достаточно. Учитывая ваши данные выборки:
> 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" }
Если вам действительно нужно, чтобы найти песни, название которой равно с именем художника (у вас нет такого документа в данном образце), вы бы просто написать:
> db.test.find({$where:
"this.song_name.toLowerCase() == this.artist.toLowerCase()"
})
{ "_id" : ObjectId("557cd12284ee2ba0375f4fd1"),
"song_name" : "The Monkeys",
"artist" : "The Monkeys" }
Пожалуйста, обратите внимание, либо в случаях, я нормализовал строки с помощью toLowerCase()
. В зависимости от вашего варианта использования вам может понадобиться нечто гораздо более сложное, чем это. Например, если вам нужно соответствовать "You and Me" by "You+Me".
Используя регулярное выражение, здесь может быть даже вредным, если имя исполнителя содержит мета-символы или кванторов. Например, имя художника «You + Me», +
здесь будет интерпретироваться как 1 или более появление предыдущего символа. Итак, соответствие «YouMe», «YouuuuuMe» , но не необработанная строка «You + Me».
что у вас сделано до сих пор, пожалуйста, поделитесь ... – SSH
Я изменил свой запрос тем, что я сделал до сих пор .. – mrana