MongoDB Lookup 返回一个空数组,只有在没有数据的时候
Posted
技术标签:
【中文标题】MongoDB Lookup 返回一个空数组,只有在没有数据的时候【英文标题】:MongoDB Lookup Returns an empty array, only when there is no data 【发布时间】:2021-03-19 01:11:27 【问题描述】:let CommentsList = Comment.aggregate()
.lookup(
from: "users",
localField: "user",
foreignField: "sid",
as: "userInfo"
)
.unwind("$userInfo")
.addFields(
"comId": "$toString": "$_id"
)
.lookup(
from: "alt_comments",
localField: "comId",
foreignField: "commentId",
as: "altComments"
)
.unwind("$altComments")
.group(
"_id": "$_id",
"username": "$first": "$userInfo.username" ,
"avatar": "$first": "$userInfo.avatar" ,
"content": "$first": "$comment" ,
"likeCount": "$first": "$likeCount" ,
"likedUsers": "$first": "$likedUsers" ,
"unlikeCount": "$first": "$unlikeCount" ,
"unlikedUsers": "$first": "$unlikedUsers" ,
"avgCount": "$first": "$avgCount" ,
"type": "$first": "$type" ,
"slug": "$first": "$slug" ,
"sendDate": "$first": "$sendDate" ,
"starter": "$first": "$user" ,
"altComments": "$push": "$altComments"
)
.match("slug": req.query.slug, "type": req.query.type)
.sort( sendDate: -1 )
.skip(10 * req.query.page)
.limit(10);
我有这个代码。这段代码有什么问题;
如果 altComments 为空,则即使有数据也返回一个空数组。如果我将 alt 评论数据添加到任何评论,则响应是正确的。我该如何解决这个问题?我做错了什么?
【问题讨论】:
【参考方案1】:原因是$unwind
。 preserveNullAndEmptyArrays
的展开默认行为是 false
。简而言之,如果数组为空或 null,则在解构时删除文档。如果不需要删除,可以设为true
。因此,当您的数组没有任何元素时,文档将被删除。那就是你得到空数组
$Unwind documentation
【讨论】:
以上是关于MongoDB Lookup 返回一个空数组,只有在没有数据的时候的主要内容,如果未能解决你的问题,请参考以下文章