【问题标题】:Pull only one item in an array of instance in MongoDB?在 MongoDB 的实例数组中只拉一个项目?
【发布时间】:2020-12-12 17:03:14
【问题描述】:

我正在使用 MongoDB(通过在 NodeJS 上使用 Mongoose)。

{
"_id":{"$oid":"5fa4386f3a93dc470c920d76"},
"characters":[
    {"$oid":"5fa4389e3a93dc470c920d78"},
    {"$oid":"5fa4389e3a88888888888888"},
    {"$oid":"5fa4389e3a88888888888888"},
    {"$oid":"5fa4389e3a88888888888888"}
    ]
}

我试图在我的字符数组中仅删除一行对象 ID“5fa4389e3a88888888888888”。 通过这样做..

User.findByIdAndUpdate("5fa4386f3a93dc470c920d76", { $pull: { characters: "5fa4389e3a88888888888888" } }, (err) => {});

问题是每行具有“5fa4389e3a88888888888888”值的行都被删除了。 我只想拉 1。

有可能吗?

感谢您的帮助

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    您可以使用update with aggregation pipeline,并使用$function 运算符定义自定义函数以实现MongoDB 查询语言不支持的行为。从 MongoDB v4.4 开始,

    User.findByIdAndUpdate("5fa4386f3a93dc470c920d76",
    [
        {
            $set: {
                characters: {
                    $function: {
                        body: function(characters) {
                            for (var i=0; i<characters.length; i++) {
                                if (characters[i] == "5fa4389e3a88888888888888") {
                                    delete characters[i];
                                    break;
                                }
                            }
                            return characters;
                        },
                        args: ["$characters"],
                        lang: "js"
                    }
                }
            }
        }
    ])
    

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 2021-10-10
      • 2021-12-06
      • 2019-08-01
      • 2017-03-12
      • 2020-03-26
      • 2018-05-22
      • 2013-05-27
      • 1970-01-01
      相关资源
      最近更新 更多