【问题标题】:MongoDb - findOneAndDelete nested object query doesnt workMongoDb - findOneAndDelete 嵌套对象查询不起作用
【发布时间】:2021-08-12 10:25:19
【问题描述】:

我正在尝试查询我的数据库,但我不明白为什么它不起作用我正确地遵循了架构,但是无论出于何种原因 findOneDelete 只是删除了我的整个容器,任何帮助都会很棒!

            dbContainer.findOneAndDelete({
                "positions": {
                    $elemMatch: {
                        sampleID: request.params.sampleID
                    }
                }
            }).then((containerToUpdate) => {})

//我的架构 盒子ID:字符串, 容器ID:字符串, 状态:号码, 盒子类型:数字, 容器类型:数字, 评论:字符串, 职位:[{ 位置:号码, 小瓶ID:字符串, 样品ID:字符串 }],

【问题讨论】:

    标签: node.js typescript mongodb mongoose


    【解决方案1】:

    request.params.sampleID 的数据类型是什么。在 mongo 中 sampleID: 1 和 sampleID: '1' 被认为是不同的。

    你可以试试 toString()

    dbContainer.findOneAndDelete({
                    "positions": {
                        $elemMatch: {
                            sampleID: request.params.sampleID.toString()
                        }
                    }
                }).then((containerToUpdate) => {})
    

    【讨论】:

    • toString 不起作用,因为 sampleID 是一个字符串,request.params.sampleID 也是一个字符串,很可能我在其他地方搞砸了,但我看不到怎么做,谢谢你的尝试不过!
    【解决方案2】:

    如果 id 是 ObjectId,则必须进行解析。 Mongoose 提供了这个解析,你可以像上面那样使用:

    dbContainer.findOneAndDelete({
                "positions": {
                    $elemMatch: {
                        sampleID: mongoose.Types.ObjectId(request.params.sampleID)
                    }
                }
            }).then((containerToUpdate) => {})
    

    【讨论】:

    • 不幸的是,这引发了一个错误,我已经在其他多个事情上使用了这个查询,但由于某种原因 delete 只是不喜欢它!
    猜你喜欢
    • 2021-11-12
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2018-02-28
    • 2011-03-21
    相关资源
    最近更新 更多