【发布时间】:2019-09-21 10:56:14
【问题描述】:
我有 photos_cmets 收藏:
{
"_id" : ObjectId(""),
"photo_id" : ObjectId(""),
"content" : "Comment 1",
"is_approved" : "1",
"user" : {
"user_id" : ObjectId(""),
"name" : "",
"avatar" : ".jpg"
},
"likes" : [
{
"user_id" : ObjectId("")
}
],
"like_count" : 1,
"reply_count" : 5,
"replies" : [
{
"reply_id" : ObjectId(""),
"content" : "Reply 1",
"is_approved" : "1",
"user" : {
"user_id" : ObjectId(""),
"name" : "",
"avatar" : ".jpg"
},
"likes" : [
{
"user_id" : ObjectId("")
}
],
"like_count" : 1
},
]
}
我使用 $in 检查当前用户是否喜欢回复评论:
$collection->aggregate(
[
[
'$match' => [
'_id' => new ObjectId($comment_id)
]
],
[
'$project' => [
'replies.reply_id' => 1,
'replies.like_count' => 1,
'replies.content' => 1,
'replies.is_liked' => ['$in' => [['user_id' => $user_id], '$replies.likes']],
'replies.user' => 1,
'replies.created_at' => 1
]
],
['$sort' => ["replies.reply_id" => 1]],
['$limit' => 5]
]);
但是replies.is_liked 总是返回false,尽管它存在于replies 数组嵌入的likes 数组中的user_id。
如何解决?谢谢!
看起来您的帖子主要是代码;请添加更多详细信息。
【问题讨论】:
-
您实际期望的结果是什么? 显示您的预期结果。请注意,您的文档中的
replies如图所示是一个数组,因此$project阶段中的简单“点符号”不足以更改 每个数组元素。如果您希望所有数组元素都被更改,那么您必须使用$map -
标签: php mongodb mongodb-query