我正在嘗試回傳基于真偽的值存在于其他集合的陣列中。
假設我的事件集合如下。
{"_id":{"$oid":"626aa83ca3d690ffe4a40103"},"name":"event1","title":"Event 1"}
{"_id":{"$oid":"626aa83ca3d690ffe4a40104"},"name":"event2","title":"Event 2"}
{"_id":{"$oid":"626aa83ca3d690ffe4a40105"},"name":"event3","title":"Event 3"}
我的用戶收藏如下:
{"_id":{"$oid":"62149d30950b000a31448eb3"},"userName":"[email protected]","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 中,其值為[email protected]
{"_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。所以無法弄清楚這件事的邏輯。
uj5u.com熱心網友回復:
詢問
- 查找適用于
single value/array,如果陣列包含此值則匹配 - 而不是進行所有會更慢的查找,
$limit 1而是使用更多記憶體等,因為我們只關心是否找到匹配項 if results are empty => attented = false else attended=true
玩蒙哥
Event.aggregate(
[{"$lookup":
{"from": "User",
"localField": "_id",
"foreignField": "_eventIds",
"pipeline": [{"$limit": 1}],
"as": "attended"}},
{"$set":
{"attended": {"$cond": [{"$eq": ["$attended", []]}, false, true]}}}])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/467430.html
