【发布时间】:2020-04-30 02:05:11
【问题描述】:
db.main.aggregate([
{
$lookup: {
from: "history",
localField: "history_id",
foreignField: "history_id",
as: "History"
}
},
{
$project: {
"History": {
$filter: {
input: "$History",
as: "his",
if: {
$eq: [
"5e4a8d2d3952132a08ae5764",
"$$his.user_id"
]
},
then: {
cond: {
$and: [
{
$lt: [
"$$his.date",
"$date"
]
},
{
$eq: [
"5e4a8d2d3952132a08ae5764",
"$$his.user_id"
]
}
]
}
},
else: {}
}
},
data: 1,
history_id: 1,
sender_id: 1,
text: 1,
date: 1
}
},
{
$unwind: "$History"
}
])
在过滤器出现错误时使用 if 条件。我的目的是指定 user_id 与历史的 user_id 匹配,然后条件工作否则不。
如何解决它,请指导或欢迎替代方法。
【问题讨论】:
-
@whoami 只需要设置这个条件 if { $eq: [ "5e4a8d2d3952132a08ae5764", "$$his.user_id" ] } 然后过滤工作,否则没有:{} 有没有机会请?
-
我想我已经看到这个问题被问了 3 或 4 次,但我仍然不确定你想要完成什么。如果您可以逐步解释您想要比较的内容以及它与您想要匹配的文档之间的关系,我们可以帮助您完成此查询。
-
有什么聊天室可以聊聊以获得更好的解释?
标签: mongodb filter mongodb-query aggregation-framework conditional-statements