Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mongodb中使用$inc和$addToSet_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 在mongodb中使用$inc和$addToSet

Javascript 在mongodb中使用$inc和$addToSet,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个简单的功能,可以在这个web应用的后端喜欢帖子。 我正在使用.findByIdAndUpdate应用两个更改: 将用户id按数组推送到帖子的\u 更改likes\u count属性以反映更新 我正在使用$addToSet修饰符将用户id推送到帖子的\u-by数组,以避免将用户id推两次 但是如果我只是增加likes\u计数,即使用户id已经存在于\u liked\u by数组中,并且数组保持相同大小,该函数实际上也会增加它 是否有方法将\u liked\u作为likes\u coun

我有一个简单的功能,可以在这个web应用的后端喜欢帖子。

我正在使用
.findByIdAndUpdate
应用两个更改:

  • 将用户id按数组推送到帖子的
    \u

  • 更改
    likes\u count
    属性以反映更新

我正在使用
$addToSet
修饰符将
用户id
推送到帖子的
\u-by
数组,以避免将
用户id
推两次

但是如果我只是增加
likes\u计数
,即使
用户id
已经存在于
\u liked\u by
数组中,并且数组保持相同大小,该函数实际上也会增加它

是否有方法将
\u liked\u作为
likes\u count
属性的值以优雅的方式传递给
数组大小?

代码如下:

Post.findByIdAndUpdate({
_id:post_id
}, {
$addToSet:{
_用户id
},
//我想要一些像。。。
$set:{
喜欢\u计数:\u喜欢\u的长度
//…就像它读取上一个$addToSet之后的实际长度一样
//有没有类似的选择?
}
}, {
新:真的
})
。然后((更新的帖子)=>{
res.status(200).json({
信息:“这篇文章很受欢迎!”,
职位:更新职位
});
})
.catch((错误)=>{
res.status(500).json({
消息:“出现问题|内部服务器错误”,
犯错误
});
});
};

在查询的筛选(查询)部分中,通过
数组而不是使用来筛选您的
数组增加1

Post.findByIdAndUpdate(
  { "_id": post_id, "_liked_by": { "$ne": user_id } },
  {
    "$addToSet": { "_liked_by": user_id },
    "$inc": { "likes_count": 1 }
  },
  { "new": true }
)
您也可以使用,因为我们在查询部分进行过滤

Post.findByIdAndUpdate(
  { "_id": post_id, "_liked_by": { "$ne": user_id } },
  {
    "$push": { "_liked_by": user_id },
    "$inc": { "likes_count": 1 }
  },
  { "new": true }
)

我喜欢这个解决方案