我有一个包含歌曲集的mongoDB数据库。每个文档都包含标题,艺术家姓名和其他一些信息。
我的应用允许用户加载自己的播放列表。基本上我最终得到一个标题/艺术家列表,并希望将其与我的数据库中的那些匹配。如果歌曲不在我的数据库中,我会将其保存,否则我会将其添加到用户的帐户中。
根据标题和艺术家价值搜索所有这些歌曲的最有效方法是什么?现在我循环播放列表中的每首歌曲并在数据库中搜索它,但这非常耗时。 (可能有数千首歌曲。)
我知道mongoDB有一个$in
运营商,但我认为这不足以解决我的问题。
我也使用ElasticSearch,也许有更好的方法来做我想要的东西。
感谢。
答案 0 :(得分:0)
使用ElasticSearch,您可以轻松完成此操作。
将您的歌曲放到Elasticsearch中,如下所示:
POST songscollection\data
{
"artist": "Artist3",
"title": "Song1"
}
然后使用播放列表中的所有歌曲为Elasicsearch创建一个查询
POST songscollection\data\_search
{
"query":{
"bool": {
"should" : [
{
"bool": {
"must": [
{ "match" : { "artist" : "Artist1" } },
{ "match" : { "title" : "Song1" } }
]
}
},
{
"bool": {
"must": [
{ "match" : { "artist" : "Artist3" } },
{ "match" : { "title" : "Song1" } }
]
}
}
],
"minimum_should_match" : 1
}
}
}
您将获得数据库中存在的所有歌曲,并在代码中轻松映射用户播放列表。