当前位置: 首页 > 知识库问答 >
问题:

查找/或实现正确的mongoDb方法以查找和更新子文档[duplicate]时遇到困难

邴宏大
2023-03-14

我正在尝试根据子文档的Id和父文档的Id更新子文档中的特定字段。我是新手,所以我可能误会了mongoDb文档,但据我所知,findOneAndUpdate应该可以工作。我还尝试了just update、updateOne以及FindByIdandUpdate。我尝试的任何操作都没有成功更新我的对象。

{
    "_id": {
        "$oid": "5c97cf50cc81525a75eb6c19"
    },
    "email": "email@gmail.com",
    "password": "$2b$10$6ixbu2Ka.Zj0eE5kF21MLO6CiMblgu4D6IHiC7Ta52o.cZFMNw1Mm",
    "__v": 0,
    "savedBeers": [
        {
            "id": 2,
            "comment": null,
            "rating": 0
        },
        {
            "id": 4,
            "comment": null,
            "rating": 0
        }
    ]
}

前端:

function addRating(beerId, ratingValue){
    let userId= localStorage.userId
    console.log(beerId, userId, ratingValue);
    $.ajax({
        type: "PUT",
        url: `/user/${userId}/${beerId}/${ratingValue}`,
        success: addRatingSuccess,
        error: addRatingError
    });
    function addRatingSuccess(response) {
        console.log("added", response);
    }
    function addRatingError() {
        console.log("error");    
    }
}

后端UserController.js:

 addRating:(req,res)=>{
            console.log(req.params);
            req.params.beerId = parseInt(req.params.beerId)
            req.params.ratingValue = parseInt(req.params.ratingValue)
            db.User.findOneAndUpdate(
                 {_id: ObjectId(req.params.userId), "savedBeers.id": req.params.beerId },
                { $set: { 'savedBeers.$.rating' : req.params.ratingValue } },
                {new:true})
                .exec(function (err, doc){
                    if (err){
                        console.log(err);
                        res.json({
                            "error": err
                        })
                    } else {
                        console.log(doc);
                        res.json({
                            doc
                        })
                    }
                }) 
        }

这是我在前端得到的回应:

added 
{doc: {…}}
doc:
email: "email@gmail.com"
savedBeers: Array(2)
0: {id: 2, comment: null, rating: 0}
1: {id: 4, comment: null, rating: 0}
length: 2
__proto__: Array(0)
__v: 0
_id: "5c97cf50cc81525a75eb6c19"
__proto__: Object
__proto__: Object
{ userId: '5c97cf50cc81525a75eb6c19', beerId: 4, ratingValue: 3 }
{ savedBeers:
   [ { id: 2, comment: null, rating: 0 },
     { id: 4, comment: null, rating: 0 } ],
  _id: 5c97cf50cc81525a75eb6c19,
  email: 'email@gmail.com',
  __v: 0 }


共有1个答案

贺彬
2023-03-14

在“{$SET:{”Saved Beers.$“:Req.Params.RatingValue}”中的“SavedBeers.$”后面似乎缺少了“.Rating”

因此该行应为“{$SET:{”Saved Beers.$.Rating“:Req.Params.RatingValue}”

 类似资料:
  • 问题内容: 我的文件 夹Folder 具有以下架构: 因此,对于每个页面,我可以拥有许多权限。在CMS中,有一个面板,其中列出了所有文件夹及其权限。管理员可以编辑一个权限并保存。 我可以很容易地用其权限数组保存整个 Folder 文档,其中只修改了一个权限。但是我不想保存所有文档(实际架构中包含更多字段),所以我这样做了: 但是问题是 烫发 总是 不确定的 !我试图以这种方式“静态地”获取许可:

  • 我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。

  • 我已经实现了Serializable、实现了hashCode和equals。 我在MongoDB文档类中使用自定义键类,如下所示。 我可以使用spring data mongodb将文档保存到mongodb中。 我首先使用的标准如下。 根据上述标准,我然后执行一个update状态, 但是,我的更新失败,出现错误,

  • 问题内容: 我有Mongoose架构,其中有一个天属性 我想查找输入的最后一天的数据,所以说今天就是我要查找输入的最后一天。或者说另一种说法。什么是属性小于等于但大于所有其他文档的文档呢? 或另一种方式 属性小于等于的所有文档集中的最大元素是什么 然后遍历我所有的文档,我该怎么做呢? 问题答案: 在外壳中将是: 查找所有小于16085 的文档,对它们进行降序排序,然后采用第一个。 在Mongoos

  • 以下是两种猫鼬模式: 雇员模式: 员工详细模式: 雇员详细模式数据会按需保存,例如当特定状态分配给雇员时。在这种情况下,一旦保存了雇员详细信息文档,相应的雇员详细信息ID就会保存回雇员模式作为雇员详细信息ID 现在,员工模式和员工模式之间存在双向关系。 用例: 我想找到所有被标记为特定状态的员工。假设输入状态ID为,那么我想获取EmployeeDetail文档中状态ID为的所有员工。 以下是我尝试

  • 排序文档 服务器保存文档的次序是根据它们添加表时的次序。Navicat 的排序功能是暂时重新排列文档,以便你可以用一个不同的序列查看或更新它们。 将光标移动到你想要排序内容的字段标题,点击字段的右侧并选择“升序排序”、“降序排序”或“移除排序”。 若要按自定义次序来排序多个字段,请在工具栏点击 “排序”。 查找和替换 查找文档 查找栏能在查看器中快速搜索文本。只需简单地选择“编辑”->“查找”或按