【问题标题】:mongodb get list of subdocuments that matched with list of valuesmongodb获取与值列表匹配的子文档列表
【发布时间】:2020-06-07 23:02:46
【问题描述】:

我的文档架构是这样的

_id: kkj33h2kjkjh32jk34
events: [
        {
          _id: k234j3lk4k2j3h4j3j4
        },
        {
          _id: k234j3lk4k2j3h4j3j4
        },
        {
        _id: k234j3lk4k2j3h4j3j4
         }
      ]

这是我的查询,我有一个事件字段的子文档的 _id 列表,我需要获取所有匹配的子文档作为来自我尝试使用 $in 的事件字段的响应,但任何人都可以建议我该怎么做

试过了

subarr=['fh576hgfu658uyg7h','k234j3lk4k2j3h4j3j4']
model.findOne({
                    clgid: req.query.clgid,
                    'events._id': {$in:subarr}
                },{"events.$":1});

但是上面代码的问题是它正在获取第一个匹配的子文档。但我需要所有匹配的子文档。 建议我执行此查询的正确方法,以便我从数组中获取所有匹配的子文档

【问题讨论】:

  • 您正在执行findOne 方法,该方法将只返回一个文档。
  • 是的,我需要在文档中匹配子文档

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

您的查询仅匹配第一个子文档的问题是在您的投影中使用了{"events.$":1}

我不确定您实际上打算做什么。 根据documentation of the $ operator{"events.$":1} 将限制为与您的查询匹配的第一个(子)文档。
也许您只是想获取子文档的_id,然后,请尝试以下操作:

subarr=['fh576hgfu658uyg7h','k234j3lk4k2j3h4j3j4']
model.findOne({
    clgid: req.query.clgid,
    'events._id': {$in:subarr}
},{"events._id":1});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 2021-10-07
    • 2020-01-12
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多