对于这个 SQL 查询:
select movies.title
from movies
inner join ratings on movies.movieId=ratings.movieId
where movies.genres like '%Children%'
and ratings.rating>3
group by movies.title;
等效的 MongoDB 查询是:(包括排序和限制,如果不需要,删除)
db.movies.aggregate(
[
{
"$lookup" : {
"from" : "ratings",
"localField" : "movieId",
"foreignField" : "movieId",
"as" : "ratings_docs"
}
},
{
"$match" : {
"ratings_docs" : {
"$ne" : [ ]
}
}
},
{
"$addFields" : {
"ratings_docs" : {
"$arrayElemAt" : [
"$ratings_docs",
0
]
}
}
},
{
"$match" : {
"genres" : /^.*Children.*$/is,
"ratings_docs.rating" : {
"$gt" : 3
}
}
},
{
"$group" : {
"_id" : {
"title" : "$title"
}
}
},
{
"$project" : {
"title" : "$_id.title"
}
},
{
"$sort" : {
"_id" : -1
}
},
{
"$limit" : 100
}
]
)
您还可以随时从工具中生成等效的 mongodb 查询。就我而言,我使用的是No Sql Booster for MongoDB。我也在使用免费版的No Sql Booster for MongoDB
您可以遵循的步骤:
-
第 1 步: 连接您的 Mongo DB 查询字符串,并选择此
SQL,如图所示:
-
第 2 步: 您将看到一个带有
mb.runSQLQuery() 的文本区域,如下所示。您可以编写任何查询,然后单击代码。代码将在下面生成,如图所示。不用担心,它会转换所有查询,不会连接到数据库。