繁体   English   中英

Mongoose,更新了嵌套数组

[英]Mongoose, updated nested array

我的问题是:如何在嵌套的 arrays 中查询? 我想更改嵌套在数组“usersWhoLiked”中的 object 中的键“likeUp”中的值。 “usersWhoLiked”嵌套在数组“comments”中我如何使用 mongoose 做到这一点?

我在下面写的请求......不起作用,但与 StackOverflow 帖子中给出的答案非常相似: ZCCADCDEDB567ABAE643E15DCF0974E503Z update update update nested object inside an array

这是我对带有 updateOne 的 db 的请求:

try {
    const response = await Comments.updateOne(
        {
            productId,
            comments: { $elemMatch: { usersWhoLiked: { $elemMatch: { userId } } } },
        },
        {
            $set: { 'comments.$[outer].usersWhoLiked.$[inner].likeUp': likes.up },
        },
        {
            arrayFilters: [{ 'outer._id': commentId }, { 'inner._userId': userId }],
        }
    ).exec();
    return res.status(201).json({ response });
} catch (err) {
    console.log(err);
    return res.send(err);
}

这是我正在尝试更新的集合:

    {
  "_id": {
    "$oid": "6307569d2308b78b378cc802"
  },
  "productId": "629da4b6634d5d11a859d729",
  "comments": [
    {
      "userId": "62f29c2c324f4778dff443f6",
      "userName": "User",
      "date": "2022.08.25",
      "confirmed": true,
      "likes": {
        "up": 0,
        "down": 0
      },
      "content": {
        "rating": 5,
        "description": "Nowy komentarz"
      },
      "_id": {
        "$oid": "630756b22308b78b378cc809"
      },
      "usersWhoLiked": [
        {
          "userId": "62f29c2c324f4778dff443f1",
          "likeUp": true,
          "_id": {
            "$oid": "6307572d2308b78b378cc80e"
          }
        },
        {
          "userId": "62f29c2c324f4778dff443f2",
          "likeUp": true,
          "_id": {
            "$oid": "6307572d2308b78b378cc80c"
          }
        }
      ]
    }
  ],
  "__v": 0
}

用于评论收集的 Mongooes 架构:

const commentSchema = new Schema({
    productId: String,
    comments: [
        {
            userId: String,
            userName: String,
            date: String,
            confirmed: Boolean,
            likes: {
                up: {
                    type: Number,
                    default: 0,
                },
                down: {
                    type: Number,
                    default: 0,
                },
            },
            content: {
                rating: Number,
                description: String,
            },
            usersWhoLiked: [{ userId: String, likeUp: Boolean }],
        },
    ],
});

我想问题出在您的arrayFilters运算符上,因为您试图按不存在的字段_userId进行过滤:

arrayFilters: [{ 'outer._id': commentId }, { 'inner._userId': userId }],

我设法使用以下查询更新了likeUp值:

db.collection.update({
  _id: ObjectId("6307569d2308b78b378cc802")
},
{
  $set: {
    "comments.$[user].usersWhoLiked.$[like].likeUp": false
  }
},
{
  arrayFilters: [
    {
      "user._id": ObjectId("630756b22308b78b378cc809")
    },
    {
      "like.userId": "62f29c2c324f4778dff443f1"
    }
  ]
})

在 MongoDB 操场上试一试: https://mongoplayground.net/p/XhQMNBgEdhp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM