gpt4 book ai didi

node.js - MongoDB $addFields 和 $in 总计

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:40 25 4
gpt4 key购买 nike

我有以下结构:

{  
"_id":"some_id",
"tweets":[
{
"id":"1077633161922785281",
"created_at":"Tue Dec 25 18:32:21 +0000 2018",
"favorite_count":1905,
"retweet_count":27,
"media":[

],
"text":"Chillin",
"avatar":"https://pbs.twimg.com/profile_images/1062579676508381184/gDukIs20_normal.jpg",
"name":"Chance Morris",
"display_name":null,
"user_id":"1087348778",
"likedBy":[
"some-random-dude"
],
"likes":1
}
]
}

如果likedBy数组包含user_id$project,我想$addFields is_liked隐藏数组

 db().collection('gamers').aggregate([
{
$project: {
'tweets.likedBy': 0
}
},
{
$addFields: {
'tweets.is_liked': {
$map: {
input: "$tweets",
as: "tweet",
in: {
id: "$$tweet.id",
text: "$$tweet.text",
is_liked: { $in: [ "some-random-dude", { $ifNull: [ "$$tweet.likedBy", [] ] } ] }

}
}
}
}
} ])

问题是 $map 数组在每个项目中重复:截图:https://prnt.sc/lzrwln

基本上,最终结果是将 likedBy 数组替换为 is_liked: true/false,因此我不必在 FE 中携带该数组来检查用户是否喜欢

最佳答案

您可以使用$mergeObjects将现有推文与 is_liked 字段合并,然后使用 $project要从最终结果中排除 likedBy 数组,请尝试:

db.gamers.aggregate([
{
$project: {
tweets: {
$map: {
input: "$tweets",
as: "tweet",
in: {
$mergeObjects: [
"$$tweet",
{ is_liked: { $in: [ "some-random-dude", { $ifNull: [ "$$tweet.likedBy", [] ] } ] } }
]
}
}
}
}
},
{
$project: {
"tweets.likedBy": 0
}
}
])

关于node.js - MongoDB $addFields 和 $in 总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53934300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com