【发布时间】:2021-09-11 03:35:33
【问题描述】:
不熟悉 Mongo 并且仍在进步,我遇到了一个我无法解决的问题(而且我不知道这是否可行)
我有一个Event 文档,其结构如下:
{
"_id": "6138451fb3a7d9564a0229fd"
"title": "Event 1",
"cohortsGroups": [
[
{
"_id": "6124beef59d728c82088fd59",
"name": "2022",
"type": "promotion"
},
{
"_id": "6124bf2159d728c82088fd60",
"name": "Toronto",
"type": "city"
}
],
[
{
"_id": "6124beef59d728c82088fd57",
"name": "2024",
"type": "promotion"
},
{
"_id": "6124bf2159d728c82088fd68",
"name": "Tokyo",
"type": "city"
}
],
]
},
{
"_id": "6138451fb3a7d9564a0229fe"
"title": "Event 2",
"cohortsGroups": [
[
{
"_id": "6124beef59d728c82088fd59",
"name": "2022",
"type": "promotion"
}
]
]
},
{
"_id": "6138451fb3a7d9564a0229fh"
"title": "Event 3",
"cohortsGroups": [
[
{
"_id": "6124beef59d728c82088fd21",
"name": "2022",
"type": "promotion"
},
{
"_id": "6124beef59d728c82088fd43",
"name": "Amsterdam",
"type": "city"
}
]
]
}
如您所见,cohortsGroups 字段是一个双精度对象数组。我想根据我的用户对象检索这些事件,该对象还拥有一个数组(简单)cohorts
例如,假设我的用户看起来像这样:
{
"firstName": "John",
"lastName": "Doe",
"cohortsRef": [
{
"_id": "6124beef59d728c82088fd59",
"name": "2022",
"type": "promotion"
},
{
"_id": "6124bf2159d728c82088fd60",
"name": "Toronto",
"type": "city"
}
]
}
为了简单起见,我只想在他的cohortsGroups 中的一组cohorts 中的一个让他的同类群组都出现在用户对象中时检索一个事件。
考虑到这一点和上面的例子,我只能检索Event 1 和Event 2。
我无法检索Event 3,因为即使我的用户中有群组2022,它也与我的用户群组中不存在的群组Amsterdam配对,(eq:所有群组子数组都没有值完全存在于我用户的同类群组中)。
我真的希望有人能帮我解决这个问题,到目前为止,我已经尝试将所有用户的同类群组 ID 映射到一个数组中并通过 $elemMatch 进行查询
Events.find({ cohortsGroups: { $elemMatch: { $elemMatch: { _id: { $in: [ '6124beef59d728c82088fd59', '6124bf2159d728c82088fd60' ] } } } } })
但是这个解决方案只检索具有子数组队列匹配的每个事件,它没有考虑sets,所以在这种情况下它也会检索Event 3 - 因为存在2022 - 但它是与队列 @987654338@ 配对,这是错误的。
如果我不够清楚,请告诉我,我们将不胜感激。至少要知道它是否可以作为 mongo 查询。
非常感谢阅读!
【问题讨论】:
标签: mongodb mongoose mongodb-query