【发布时间】:2021-02-20 21:10:11
【问题描述】:
我尝试使用满足某些条件的 Node.JS 从 MongoDB 集合中检索数据。我有一个名为 Events 的集合,其中包含字段 number_of_persons、category 和 users_attended。事件文档示例:
{
"category":"123",
"number_of_persons":3,
"users_attended":["345","456","567","786"]
}
Users_attended 是对 UserAttended 集合的引用,其中包含字段 id、user、accepted 和 cancelled。 示例:
{
"id":"345",
"user":"1",
"accepted":true,
"canceled":false
}
查询有一个类别数组,如 ['123','1234','12345'],我应该返回在这个数组中具有类别 id 的所有事件。此外,类别向量可以是空数组,在这种情况下,我应该返回所有事件而不按类别过滤。查询的另一个条件是 user_attended 参考是否有许多条目的 accepted=true 和 canceled=false 少于 event(3) 的人数。我应该通过聚合来做到这一点,我尝试对类别使用 $in 运算符,对 user_attended 使用 $map 但没有结果。有人可以帮我吗?
谢谢
【问题讨论】:
-
您好,这个语句:"查询的另一个条件是,如果 user_attended 引用的条目数量已经接受=true 和 cancelled=false 小于事件的人数(3 )"不清楚你能详细说明吗?
-
@DheemanthBhat 是的,当然。用户可以加入活动。当他加入一个事件时,他将被插入到 UserAttended 集合中(id:1,用户:345,接受:false,取消:false),并且他的 ref 将被插入到事件集合中的 user_attended 字段中(例如,对于事件文档:{ id:"1", category:"123", user_attended:["1"], number_of_persons: 5. 每个参加活动的用户都可以被接受(接受将设置为true)或拒绝(接受将保持为false) .
-
@DheemanthBhat 当我搜索一个事件时,我应该只返回具有可用插槽的事件(将接受字段设置为 true 的 user_attended 的数量低于事件的 number_of_persons 个)。
标签: node.js mongodb mongoose mongodb-query