当前位置: 首页 > 知识库问答 >
问题:

在mongodb中查询关系集合的最佳方式?

商皓
2023-03-14

例如,我有两个系列:

第一个被命名为“Songs ”,该集合中的文档存储关于宋立科< code >标题 、< code >持续时间 、< code >发行日期和其他的所有元数据。除此之外,还有< code>artist和< code>producer字段,这些字段存储来自“Stars”集合的相关文档的id。

“歌曲”收藏中的文档示例:

{ 
   id: SONG_ID
   title: TITLE, 
   duration: DURATION, 
   release_date: ISO_DATE,
   ...
   artist: STAR_ID
   producer: STAR_ID
} 

你猜的第二个是“星星”集合,这个集合中的文档存储了关于星星的信息,比如全名date_of_birth和其他。

“星星”收藏中的文档示例:

{ 
   id: STAR_ID
   fullname: FULLNAME, 
   date_of_birth: DATE_OF_BIRTH
   ...
} 

假设我想找到(1个条件)标题中有“爱”一词的歌曲,(2个条件)2017年发行,(3个条件)来自蕾哈娜或扎拉·拉尔森等艺术家。请注意,我的问题不同于简单的左外联接。请注意,在这个查询中,第三个条件与存储在第二个集合“Stars”中的信息有关,因此我不想仅仅用“Stars”(星星)集合中的信息污染艺术家和制作人领域,而且我想选择像蕾哈娜或扎拉·拉尔森这样的明星歌曲。

最好和最快的方法是什么?
感谢您的帮助!

共有1个答案

吕华彩
2023-03-14

你可以使用下面的聚合查询。

release_date上的$match,以及标题上的$regex匹配。

$lookup查找艺术家集合,然后在全名上查找$匹配以获取输入值。

db.Songs.aggregate([
 { "$match":{ "release_date": { "$gte": ISODate("2017-01-01T00:00:00.000Z"), "$lt": ISODate("2018-01-01T00:00:00.000Z")}, title: { $regex: /love$/ } } },
 { "$lookup": {
       "from" : "Stars",
       "localField" : "artist",
       "foreignField" : "_id",
       "as" : "star"
    }
 },
 { "$match" : { "star.fullname" : { "$in": [ "Rihanna", "Zara Larsson" ] } } }
])

正则表达式在锚定时可以使用索引。与文本搜索相比。

 类似资料:
  • 我有一个名为“Prices”的MongoDB集合,我试图查询“startDate”和“endDate”之间的价格。 该集合每10秒存储一次价格,但是当查询此集合以绘制图形时,每1-2分钟的价格才是真正重要的。 我尝试用两种不同的方式编写此查询: 方法1:使用{$gte:startDate,$lte:endDate} 此方法引发以下错误: 如果删除排序('-timestamp')行,并再次运行此查询

  • 我是MongoDB的新手,我正在创建一个数据库来记录学生和学生在大学学习的课程。有三个集合,称为学生,科目和讲师。学生集合包含studentId、姓名、dob、email、Year。主题集合包含subjectId、subjectName、credits;讲师集合包含lecturerId、lectureName、speciliazation、contactNo、email。学生和学生收藏之间的关系是

  • 很抱歉打扰你,但我无法找到一个有效的解决我的问题的方法。我想做一个MongoDB查询,让我得到与SQL查询相同的结果:

  • 2-查询id为1的人的所有地址,2我想: 好的方法是什么?

  • 我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

  • 我正在使用reactive mongodb开发简单的spring webflux演示应用程序,我想按姓名读取员工的所有数据,但不包括姓名字段“joe”、“Sara”、“joe”、“Sara”,我有如下代码: //仓库接口 //服务类