1 回答
TA贡献1864条经验 获得超6个赞
如果要更改数组内容以根据条件添加新字段,则需要运算符,并且如果您不想限制或更改返回的文档的其余部分,则$map可能使用:$addFields
$collection->aggregate([
[ '$match' => [
'_id' => new ObjectId($comment_id)
]],
[ '$addFields' => [
'replies' => [
'$map' => [
'input' => '$replies',
'in' => [
'reply_id' => '$$this.reply_id',
'content' => '$$this.content',
'is_approved' => '$$this.is_approved',
'is_liked' => [ '$in' => [ $user_id, '$$this.likes.user_id' ] ],
'like_count' => '$$this.like_count'
]
]
]
]],
... # any other pipeline
])
或者,$mergeObjects如果您的 MongoDB 支持并且您更喜欢,请使用:
$collection->aggregate([
[ '$match' => [
'_id' => new ObjectId($comment_id)
]],
[ '$addFields' => [
'replies' => [
'$map' => [
'input' => '$replies',
'in' => [
'$mergeObjects' => [
'$$this',
[ 'is_liked' => [ '$in' => [ $user_id, '$$this.likes.user_id' ] ] ]
]
]
]
]
]],
... # any other pipeline
])
当然,在这两种情况下,$user_id您的 PHP 变量在哪里是 的参数中的奇异值$in,哪里是该内部数组中值'$$this.likes.user_id'数组的 MongoDB 表示。user_id注意数组是第二个参数,单数是第一个。
$map运算符使用'$$this'来表示正在处理的数组的当前元素。在这两个示例中,这都允许重新映射数组内容,正如运算符名称所暗示的那样。
- 1 回答
- 0 关注
- 208 浏览
添加回答
举报