可以使用mongodb查询更新文档,但在mongoose中不可用

可以使用mongodb查询更新文档,但在mongoose中不可用,mongodb,express,mongoose,Mongodb,Express,Mongoose,我的收藏是这样的: 通过此查询,我可以更新回复。喜欢 db.getCollection("posts").updateOne( { "_id": ObjectId("5da832caeb173112348e509b"), //posts._id "comments.replies._id":ObjectId("5db6a88f7c6cfb0d0c2b689b"),//replies._id }, { "$push": { "comments.$[outer].repli

我的收藏是这样的:

通过此查询,我可以更新
回复。喜欢

db.getCollection("posts").updateOne(

{
    "_id": ObjectId("5da832caeb173112348e509b"), //posts._id
    "comments.replies._id":ObjectId("5db6a88f7c6cfb0d0c2b689b"),//replies._id
  },
  { "$push": { "comments.$[outer].replies.$[inner].likes": "10000012" } },
  {
    "arrayFilters": [
      { "outer._id": ObjectId("5db06e11d0987d0aa2cd5593") },//comments._id
      { "inner._id": ObjectId("5db6a88f7c6cfb0d0c2b689b") }//replies._id
    ]
  }
)
但当我使用mongoose、express、collection编写代码时,不会进行更新

    //Like Reply toggle
router.post("/toggleLikeReply", function(req, res, next) {
  var id_post = req.body.id_post;
  var id_comment = req.body.id_comment;
  var id_reply = req.body.id_reply;
  var id_user = req.user._id;
  console.log("id_post: "+id_post+" id_comment: "+id_comment+" id_reply: "+id_reply+" id_user: "+id_user);

  //todo
  Post.aggregate([
      { $match: {_id: ObjectId(id_post),"comments._id": ObjectId(id_comment)}},
      { $unwind: "$comments"},
      { $match: { "comments._id": ObjectId(id_comment)}},
      { $project: {"replies": "$comments.replies", _id: 0}},
      { $match: { "replies._id": ObjectId(id_reply)}},
      { $project: {"likes": "$replies.likes", _id: 0}}, 
    ]).exec((err, users_liked) => {
      var index = users_liked[0].likes[0].indexOf(id_user);
      console.log(users_liked[0].likes[0]);
      //todo
      if (index == -1) {
        const updatePost = async () => {
          try { 
            await Post.updateOne({
              _id: ObjectId(req.body.id_post), 
              "comments.replies._id": ObjectId(req.body.id_reply)},
              { $push: {"comments.$[outer].replies.$[inner].likes": ObjectId(req.user._id)} },
            {
              "arrayFilters": [
                { "outer._id": ObjectId(req.body.id_comment)  },
                { "inner._id": ObjectId(req.body.id_reply) }
              ]
            }
            );
          } catch (error) {
             console.log("error", error);
          }
        };
        updatePost().then(function(data) {res.send({  like: true, success: true})});

      }else{
        const updatePost = async () => {
          try { 
           await Post.updateOne({
          _id: ObjectId(req.body.id_post), 
          "comments.replies._id": ObjectId(req.body.id_reply)},
          { $pull: {"comments.$[outer].replies.$[inner].likes": ObjectId(req.user._id)} },
        {
          "arrayFilters": [
            { "outer._id": ObjectId(req.body.id_comment)  },
            { "inner._id": ObjectId(req.body.id_reply) }
          ]
        }
        );
          } catch (error) {
            console.log("Try This Query

var mongoose = require('mongoose');
const Schema = mongoose.Schema
const ObjectId = Schema.Types.ObjectId 
const updatePost = async () => {
          try { 
            await Post.updateOne({
              _id: ObjectId(req.body.id_post), 
              "comments.replies._id": ObjectId(req.body.id_reply)},
              { $push: {"comments.$[outer].replies.$[inner].likes": req.user._id} },
            {
              "arrayFilters": [
                { "outer._id": ObjectId(req.body.id_comment)  },
                { "inner._id": ObjectId(req.body.id_reply) }
              ]
            }
            );
          } catch (error) {
             console.log("error", error);
          }
        };
        updatePost().then(function(data) {res.send({  like: true, success: true})});
//类似回复切换
router.post(“/toggleLikeReply”),函数(req、res、next){
var id_post=req.body.id_post;
var id_comment=req.body.id_comment;
var id_reply=req.body.id_reply;
var id_user=req.user._id;
console.log(“id_post:+id_post+”id_comment:+id_comment+”id_reply:+id_reply+”id_user:+id_user”);
//待办事项
邮政集邮([
{$match:{{u id:ObjectId(id\u post),“comments.\u id:ObjectId(id\u comment)},
{$unwind:“$comments”},
{$match:{“comments.\u id”:ObjectId(id\u comment)},
{$project:{“回复”:“$comments.replies”,_id:0},
{$match:{“答复”.\u id:ObjectId(id\u reply)},
{$project:{“likes”:“$repress.likes”,_id:0},
]).exec((错误,用户喜欢)=>{
var index=users\u liked[0]。likes[0]。indexOf(id\u user);
log(用户喜欢[0]。喜欢[0]);
//待办事项
如果(索引==-1){
常量updatePost=async()=>{
试试{
等待Post.updateOne({
_id:ObjectId(请求主体id_post),
“comments.replays.\u id”:ObjectId(req.body.id\u replay)},
{$push:{“comments.$[outer].responses.$[inner].likes:ObjectId(req.user.\u id)},
{
“阵列过滤器”:[
{“outer.\u id”:ObjectId(req.body.id\u comment)},
{“inner.\u id”:ObjectId(req.body.id\u reply)}
]
}
);
}捕获(错误){
console.log(“错误”,error);
}
};
updatePost().then(函数(数据){res.send({like:true,success:true})});
}否则{
常量updatePost=async()=>{
试试{
等待Post.updateOne({
_id:ObjectId(请求主体id_post),
“comments.replays.\u id”:ObjectId(req.body.id\u replay)},
{$pull:{“comments.$[outer].responses.$[inner].likes:ObjectId(req.user.\u id)},
{
“阵列过滤器”:[
{“outer.\u id”:ObjectId(req.body.id\u comment)},
{“inner.\u id”:ObjectId(req.body.id\u reply)}
]
}
);
}捕获(错误){
console.log(“尝试此查询


请在id字段matchingmongoose.Schema.Types.ObjectId(req.body.id_reply)中使用ObjectId,我得到了这个变量mongoose=require('mongoose');const Schema=mongoose.Schema const ObjectId=Schema.Types.ObjectId,代码可以使用这个变量ObjectId=require('mongodb')).ObjectID;?首先,请告诉我代码是否正确运行?仍然不起作用,但我得到了
{“like”:true,“success”:true}
,请检查所有_idvalue我更新了我的问题,我的问题满是路由,