點贊表
{
likedId: 'xxx'
userId: '123'
}
{
likedId: 'aaa'
userId: '123'
}
帖子表
{
postId: 'xxx'
...
}
評論表
{
commentId: 'aaa'
...
}
Likes 表記錄了“likes”,它可以是 Posts 或 Comments,分別存盤在 Posts 和 Comments 集合中。我想做一個查找,只回傳 Likes 表中的 id只匹配 Posts 表中的一個 id,并排除回傳與 Posts 表不匹配的任何記錄,例如示例中的 'aaa' id對應于 Comments 表中的一個條目
我能想到的唯一方法是使用“匹配”,如下所示,但我得到了一個空陣列。問題是,當我運行查詢時,我得到了空記錄,其中 Likes 表中的“likedId”與 Posts 表中的任何檔案都不匹配
const pipeline = [
{
'$lookup': {
'from': 'posts',
'localField': 'likedThing',
'foreignField': '_id',
'as': 'postData'
}
}, {
'$match': {
'likedThing': 'postData._id'
}
}, {
'$sort': {
'createdAt': -1
}
}
]
我試圖告訴它只給我記錄 likeId 與 Posts 集合中的 _id 匹配的記錄。請問這可能嗎?
uj5u.com熱心網友回復:
你的問題來自你的比賽階段,如果你想過濾沒有任何帖子喜歡的記錄(喜歡),你可以例如檢查陣列是否為空:
db.likes.aggregate([
{
"$lookup": {
"from": "posts",
"localField": "likedId",
"foreignField": "postId",
"as": "postData"
}
},
{
"$match": {
"postData": {
"$ne": []
}
}
},
])
作業示例:https : //mongoplayground.net/p/WSfe7gBkXkG
如果您想通過陣列中的欄位進一步匹配,您可以使用$elemMatch:https : //docs.mongodb.com/manual/reference/operator/query/elemMatch/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368041.html
