首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以匹配字段作为数组的另一个表中的MongoDB $lookup

以匹配字段作为数组的另一个表中的MongoDB $lookup
EN

Stack Overflow用户
提问于 2022-04-28 16:00:55
回答 1查看 683关注 0票数 0

我正在尝试返回其他集合中数组中存在的基于真假的值。

假设我的事件集合如下所示。

代码语言:javascript
运行
复制
{"_id":{"$oid":"626aa83ca3d690ffe4a40103"},"name":"event1","title":"Event 1"}
{"_id":{"$oid":"626aa83ca3d690ffe4a40104"},"name":"event2","title":"Event 2"}
{"_id":{"$oid":"626aa83ca3d690ffe4a40105"},"name":"event3","title":"Event 3"}

我的用户集合如下:

代码语言:javascript
运行
复制
{"_id":{"$oid":"62149d30950b000a31448eb3"},"userName":"dummy@username.com","commentDictionary":"{}","__v":0,"createdAt":{"$date":"2022-02-22T08:22:08.161Z"},"updatedAt":{"$date":"2022-04-27T07:11:58.999Z"},"passwordResetLinkExpiryDate":{"$date":"2022-03-22T16:40:15.356Z"},"_eventIds":[{"$oid":"626aa83ca3d690ffe4a40103"},{"$oid":"626aa83ca3d690ffe4a40105"}]}

根据用户集合中_eventIds中的匹配值,我希望输出如下所示。这在userName中也是如此,它具有dummy@username.com的价值。

代码语言:javascript
运行
复制
{"_id":{"$oid":"626aa83ca3d690ffe4a40103"},"name":"event1","title":"Event 1", attended: true}
{"_id":{"$oid":"626aa83ca3d690ffe4a40104"},"name":"event2","title":"Event 2", attended: false}
{"_id":{"$oid":"626aa83ca3d690ffe4a40105"},"name":"event3","title":"Event 3", attended: true}

我正在尝试使用$lookup,但它需要一个匹配的键,但在我的例子中,它是Array。所以无法理解这方面的逻辑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-28 16:28:21

查询

  • 查找在single value/array上工作,如果数组包含此值,则匹配
  • 我们使用的不是所有速度较慢、内存更多的查找,而是使用$limit 1,因为我们只关心是否找到匹配。
  • if results are empty => attented = false else attended=true

花花果

代码语言:javascript
运行
复制
Event.aggregate(
[{"$lookup": 
   {"from": "User",
    "localField": "_id",
    "foreignField": "_eventIds",
    "pipeline": [{"$limit": 1}],
    "as": "attended"}},
 {"$set": 
   {"attended": {"$cond": [{"$eq": ["$attended", []]}, false, true]}}}])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72046873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档