在 MongoDB 中的对象数组中搜索特定属性

Posted

技术标签:

【中文标题】在 MongoDB 中的对象数组中搜索特定属性【英文标题】:Searching through a particular Property within an array of Objects in MongoDB 【发布时间】:2021-11-12 10:07:28 【问题描述】:

我曾经在我的用户架构中有这个数组,引用一门课程:

courses: [
    
      type: mongoose.Schema.Types.ObjectId,
      ref: "Course",
    ,
  ],

当我想查找特定用户订阅的不同课程的所有课程数据时,我曾经这样做:

return Course.find( _id:  $in: user.courses  )

现在我想保存用户注册每门课程的时间,但我有点卡在这里。

我想我可以把它改成这样:

courses: [

  courseRef:  // <==== Now it's not an array of refs, but an array of objects & each objects holds a reference to a course
    type: mongoose.Schema.Types.ObjectId,
    ref: "Course",
  ,
  startDate:  type: Date, default: null ,
,

],

但是,现在return Course.find( _id: $in: user.courses ) 不再起作用了,因为数组不保存这些 ref,而是数组的每个对象中的一个属性。

一些提示将不胜感激!

【问题讨论】:

【参考方案1】:
return Course.find( _id: $elemMatch:  $in: user.courses ,startDate:$gt:new Date('date') )

【讨论】:

谢谢。我不需要指定要查找startDate 字段的位置吗? 我不明白。我需要替换您的答案中的任何内容吗?我得到"ISODate is not defined 如果你想检查另一个字段,把它像 startDate 一样,所以用ISODate替换日期对象 不幸的是不起作用。 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。

以上是关于在 MongoDB 中的对象数组中搜索特定属性的主要内容,如果未能解决你的问题,请参考以下文章

在 ArrayList 中搜索特定对象

在表格视图控制器iOS swift中搜索特定记录

在一个数组中搜索特定元素并复制另一个数组中的整个对应行

在java中搜索特定记录的数组列表

如何使用 contains 在自定义对象 ArrayList 中搜索特定字符串?

如何在二维 numpy 数组中搜索特定 XY 对的位置?